- 浏览: 1486731 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (691)
- linux (207)
- shell (33)
- java (42)
- 其他 (22)
- javascript (33)
- cloud (16)
- python (33)
- c (48)
- sql (12)
- 工具 (6)
- 缓存 (16)
- ubuntu (7)
- perl (3)
- lua (2)
- 超级有用 (2)
- 服务器 (2)
- mac (22)
- nginx (34)
- php (2)
- 内核 (2)
- gdb (13)
- ICTCLAS (2)
- mac android (0)
- unix (1)
- android (1)
- vim (1)
- epoll (1)
- ios (21)
- mysql (3)
- systemtap (1)
- 算法 (2)
- 汇编 (2)
- arm (3)
- 我的数据结构 (8)
- websocket (12)
- hadoop (5)
- thrift (2)
- hbase (1)
- graphviz (1)
- redis (1)
- raspberry (2)
- qemu (31)
- opencv (4)
- socket (1)
- opengl (1)
- ibeacons (1)
- emacs (6)
- openstack (24)
- docker (1)
- webrtc (11)
- angularjs (2)
- neutron (23)
- jslinux (18)
- 网络 (13)
- tap (9)
- tensorflow (8)
- nlu (4)
- asm.js (5)
- sip (3)
- xl2tp (5)
- conda (1)
- emscripten (6)
- ffmpeg (10)
- srt (1)
- wasm (5)
- bert (3)
- kaldi (4)
- 知识图谱 (1)
最新评论
-
wahahachuang8:
我喜欢代码简洁易读,服务稳定的推送服务,前段时间研究了一下go ...
websocket的helloworld -
q114687576:
http://www.blue-zero.com/WebSoc ...
websocket的helloworld -
zhaoyanzimm:
感谢您的分享,给我提供了很大的帮助,在使用过程中发现了一个问题 ...
nginx的helloworld模块的helloworld -
haoningabc:
leebyte 写道太NB了,期待早日用上Killinux!么 ...
qemu+emacs+gdb调试内核 -
leebyte:
太NB了,期待早日用上Killinux!
qemu+emacs+gdb调试内核
openresty的websocket + redis的subscribe
参考
https://blog.csdn.net/orangleliu/article/details/50898014
利用redis的subscribe
参考http://www.runoob.com/redis/pub-sub-subscribe.html
安装redis
brew install redis
安装openresty:
openssl还是有问题 shared等
参考
https://blog.csdn.net/csdncqmyg/article/details/73835354
bundle/nginx-x-x-x(版本号)/auto/lib/openssl/conf
把.openssl删掉 ,只删这个单词
nginx调用的lua模块
ws_resdis_json.lua
nginx的配置文件
加入
客户端代码
测试,进入聊天室
{"name": "Bruce.Lin", "age": 25}
name就是发给聊天室的name
参考
https://blog.csdn.net/orangleliu/article/details/50898014
利用redis的subscribe
参考http://www.runoob.com/redis/pub-sub-subscribe.html
安装redis
brew install redis
安装openresty:
brew install openssl ./configure --prefix=/usr/local/openresty --with-openssl=/usr/local/Cellar/openssl/1.0.2o_1 make make install
openssl还是有问题 shared等
参考
https://blog.csdn.net/csdncqmyg/article/details/73835354
bundle/nginx-x-x-x(版本号)/auto/lib/openssl/conf
把.openssl删掉 ,只删这个单词
nginx调用的lua模块
ws_resdis_json.lua
local server = require "resty.websocket.server" local redis = require "resty.redis" local cjson = require "cjson" --local channel_name = "chat" local msg_id = 0 local wb, err = server:new{ timeout = 10000, max_payload_len = 65535 } if not wb then ngx.log(ngx.ERR, "failed to new websocket: ", err) return ngx.exit(444) end function creatChanel(channel_name) push = function() -- --create redis local red = redis:new() red:set_timeout(5000) -- 1 sec local ok, err = red:connect("127.0.0.1", 6379) if not ok then ngx.log(ngx.ERR, "failed to connect redis: ", err) wb:send_close() return end --sub local res, err = red:subscribe(channel_name) if not res then ngx.log(ngx.ERR, "failed to sub redis: ", err) wb:send_close() return end -- loop : read from redis while true do local res, err = red:read_reply() if res then local item = res[3] local bytes, err = wb:send_text(tostring(msg_id).." "..item) if not bytes then -- better error handling ngx.log(ngx.ERR, "failed to send text: ", err) return ngx.exit(444) end msg_id = msg_id + 1 end end end co = ngx.thread.spawn(push) end --main loop while true do local data, typ, err = wb:recv_frame() if wb.fatal then ngx.log(ngx.ERR, "failed to receive frame: ", err) return ngx.exit(444) end if not data then local bytes, err = wb:send_ping() if not bytes then ngx.log(ngx.ERR, "failed to send ping: ", err) return ngx.exit(444) end ngx.log(ngx.ERR, "send ping: ", data) elseif typ == "close" then break elseif typ == "ping" then local bytes, err = wb:send_pong() if not bytes then ngx.log(ngx.ERR, "failed to send pong: ", err) return ngx.exit(444) end elseif typ == "pong" then ngx.log(ngx.ERR, "client ponged") elseif typ == "text" then --local json_str = '{"name": "Bruce.Lin", "age": 25}' local json_str = data local json = cjson.decode(json_str) local channel_name = json["name"] creatChanel(channel_name) --send to redis local red2 = redis:new() red2:set_timeout(1000) -- 1 sec local ok, err = red2:connect("127.0.0.1", 6379) if not ok then ngx.log(ngx.ERR, "failed to connect redis: ", err) break end local res, err = red2:publish(channel_name, data) if not res then ngx.log(ngx.ERR, "failed to publish redis: ", err) end end end wb:send_close() ngx.thread.wait(co)
nginx的配置文件
加入
location = /sredis { content_by_lua_file conf/lua/ws_redis_json.lua; }
客户端代码
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no"> <script type="text/javascript"> var ws = null; function WebSocketConn() { if (ws != null && ws.readyState == 1) { log("已经在线"); return } if ("WebSocket" in window) { // Let us open a web socket ws = new WebSocket("ws://localhost/sredis"); ws.onopen = function() { log('成功进入聊天室'); }; ws.onmessage = function(event) { log(event.data) }; ws.onclose = function() { // websocket is closed. log("已经和服务器断开"); }; ws.onerror = function(event) { console.log("error " + event.data); }; } else { // The browser doesn't support WebSocket alert("WebSocket NOT supported by your Browser!"); } } function SendMsg() { if (ws != null && ws.readyState == 1) { var msg = document.getElementById('msgtext').value; ws.send(msg); } else { log('请先进入聊天室'); } } function WebSocketClose() { if (ws != null && ws.readyState == 1) { ws.close(); log("发送断开服务器请求"); } else { log("当前没有连接服务器") } } function log(text) { var li = document.createElement('li'); li.appendChild(document.createTextNode(text)); document.getElementById('log').appendChild(li); return false; } </script> </head> <body> {"name": "Bruce.Lin", "age": 25} <div id="sse"> <a href="javascript:WebSocketConn()">进入聊天室</a> <a href="javascript:WebSocketClose()">离开聊天室</a> <br> <br> <input id="msgtext" type="text"> <br> <a href="javascript:SendMsg()">发送信息</a> <br> <ol id="log"></ol> </div> </body> </html>
测试,进入聊天室
{"name": "Bruce.Lin", "age": 25}
name就是发给聊天室的name
发表评论
-
websocket直播
2020-05-22 17:59 5481.websocket转发的最简单server 2.h5接收w ... -
ios的safari使用自制ca证书测试webrtc
2018-08-20 13:31 2494这个需要注意 https://stackoverflow.c ... -
nginx push_upstream模块的websocket
2018-05-04 23:27 1234参考 https://www.rails365.net/art ... -
openresty websocket
2018-04-18 17:08 1570mac安装openresty brew install o ... -
nginx代理wss和https
2018-02-27 15:34 3945nginx启用ssl yum install openssl ... -
nginx模块开发(三)upstream模块
2017-08-20 23:48 855使用nginx-1.13.4版本 三个文件ngx_http_ ... -
nginx模块开发(二) 使用gdb-dashboard调试
2017-08-11 18:47 2037gdb-dashboard或者 gdbgui 或者gdb自带 ... -
nginx模块开发(一)
2017-07-29 22:44 571决定重新整理nginx模块开发 helloworld con ... -
nginx带进度条的上传超大文件
2016-12-12 18:40 388911年写的 http://haoningabc.iteye.c ... -
nginx rewrite替代apache rewrite
2016-10-18 20:30 849清理chrome的缓存 chrome://appcache-i ... -
websocket和tap使用select关联
2016-06-14 22:01 757c语言的socket基础http://haoningabc.i ... -
ffmpeg+nginx 的直播(2,直播摄像头和麦克风)
2016-05-28 20:21 4404假设我的服务器是centos7 192.168.139.117 ... -
ffmpeg+nginx 的直播(1,直播播放的视频文件)
2016-05-26 17:11 663864位操作系统centos7 ############ 1.一 ... -
websocket传传图片
2015-12-25 17:51 7251参考[url]http://www.adobe.com/dev ... -
websocket相关调研 总结帖
2014-12-21 21:53 4069最近把websocket的客户端和服务端使用过的调通的例子总结 ... -
autobahn的helloworld
2014-11-08 18:36 2776python2.7.8可用,python2.6一样的代码就有问 ... -
ios websocket server端
2014-10-22 00:07 2207https://github.com/benlodotcom/ ... -
ios客户端websocket的helloworld
2014-10-09 02:11 23213ios8,xcode6 https://github.com/ ... -
websocket,使用tomcat7转发
2014-10-03 18:40 11760前篇: http://haoningabc.iteye.com ... -
nginx执行流程
2014-04-15 18:35 1088目标:打印nginx执行之后的流程方法 my_debug.c ...
相关推荐
内容概要:本文档阐述了 Python 爬虫的基本概念,详细讲解了构建一个简单有效的爬虫所需的五个关键步骤——确定目标、发送请求、解析内容、提取数据和保存结果,并附带了每个阶段相应的实例代码段帮助理解和实施。此外,文中强调了在网络爬虫过程中必须考虑的因素,如遵纪守法,确保不会干扰到网站正常运作或是违反站点设定的规定;以及提供了实用建议以保障高效而不失礼貌地收集所需信息。最后,文档提及Python爬虫主要应用场景包括但不限于数据挖掘、市场调研以及竞争情报搜集等方面。 适用人群:对于有兴趣了解或深入研究Web Scraping的学生、开发者和技术爱好者。 使用场景及目标:无论是初学者希望获得有关Python编程的第一手经验,还是已经有一定经验的技术工作者打算提高效率解决实际问题都非常合适。 其他说明:本文不仅介绍了基础概念与常用方法论,而且给出了完整的学习路径指导和编程指南,旨在让每位参与者都可以顺利入门并逐步掌握高级技巧。同时提醒使用者务必注意合法合规地运用此类技能。
珠宝门店营销管理导购绩效考核表
员工晋升管理规定
人力资源+大数据+薪酬报告+涨薪调薪,在学习、工作生活中,越来越多的事务都会使用到报告,通常情况下,报告的内容含量大、篇幅较长。那么什么样的薪酬报告才是有效的呢?以下是小编精心整理的调薪申请报告,欢迎大家分享。相信老板看到这样的报告,一定会考虑涨薪的哦。
绩效考核方案(医药公司)
Python源码实例07之对数据分析时判断只能选择Excel或者CSV文件.zip
1、文件内容:alsa-plugins-samplerate-1.1.6-1.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/alsa-plugins-samplerate-1.1.6-1.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
基于OPC UA Client的数据读取与多途径数据传输:Socket通信、数据库保存及OPC DA SERVER转换,使用OPC UA Client读取服务器的数据,可以使用Socket对外提供数据,可以保存到数据库,可以转为OPC DA SERVER对外提供数据。 ,核心关键词:OPC UA Client; 读取服务器数据; Socket通信; 数据保存; 数据库; 转换为OPC DA SERVER。,"OPC UA Client数据读取与转换:Socket通信、数据库保存及OPC DA SERVER输出"
Python源码实例09之如何使用tkinter模块弹出不同种类的消息提示框.zip
JavaScript 实现钢琴特效(打开HTML即可看到效果)
陇顶728用户好评反馈合集
新能源公司绩效考核管理制度
基于python机器学习9种模型实现心脏病发病预测源码+心脏病数据集+详细注释(高分比赛项目) 【项目介绍】 模型构建与训练:运用 9 种不同的模型架构进行搭建,这些模型可能包括常见的机器学习模型如决策树、随机森林、支持向量机等,也可能涉及深度学习模型如神经网络。针对每种模型,使用预处理后的数据进行训练,通过调整模型的参数(如决策树的深度、神经网络的层数和节点数等),利用合适的损失函数和优化算法(如梯度下降法),使模型能够学习到数据中的模式和规律,尽可能准确地拟合数据,以提高预测的准确性。 模型评估与选择:采用多种评估指标(如准确率、召回率、F1 值、AUC - ROC 曲线等)对训练好的 9 种模型进行评估。比较不同模型在这些指标上的表现,分析每个模型的优势和劣势,从而选择出在预测心脏病方面性能最优的模型,或者根据实际应用场景综合考虑多个模型的组合,以达到更好的预测效果。 预测与应用:将经过评估和选择后的模型应用于新的患者数据,对患者是否患有心脏病进行预测。输出预测结果,并可能提供相应的风险等级或概率估计,为医生的临床诊断提供辅助参考,帮助医生更高效、准确地判断患者的病情,制定合理的
IT项目绩效管理
三电平NPC型APF模型预测控制开关频率优化研究:滞环控制模块应用及效果分析,降低开关频率的三电平npc型APF的模型预测控制。 同等参数下传统的模型预测控制的开关频率大概在4392Hz附近,经过添加滞环控制模块后,开关频率降到了3242Hz,效果显著。 ,核心关键词:降低开关频率; 三电平NPC型APF; 模型预测控制; 滞环控制模块; 开关频率下降。,"优化三电平NPC型APF:模型预测控制降低开关频率至3242Hz"
杨鹏程24年度工作总结及规划
ComfyUI工作流文件和开发API文件 更多内容可以查阅 工作流讲解,文件和文件汇总: 《ComfyUI工作流教程、软件使用、开发指导、模型下载》https://datayang.blog.csdn.net/article/details/145220524 图形桌面工具使用教程: 《我的AI工具箱Tauri+Django环境开发,支持局域网使用》https://datayang.blog.csdn.net/article/details/141897682
Python源码实例01之如何以当前日期批量创建文件.zip
ComfyUI工作流文件和开发API文件 更多内容可以查阅 工作流讲解,文件和文件汇总: 《ComfyUI工作流教程、软件使用、开发指导、模型下载》https://datayang.blog.csdn.net/article/details/145220524 图形桌面工具使用教程: 《我的AI工具箱Tauri+Django环境开发,支持局域网使用》https://datayang.blog.csdn.net/article/details/141897682
C#实现西门子PLC数据通信读写:集成OPC、Socket与数据库的技术实践,C#读写西门子PLC.OPC.数据库.Socket 1、PLC数据通信读写; 2、联合OPC; 3、联合Socket; 4、联合数据库; ,核心关键词:C#读写; PLC数据通信读写; 联合OPC; 联合Socket; 联合数据库。,"C#实现PLC与数据库通信:OPC与Socket联合应用"