- 浏览: 1477772 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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 5081.websocket转发的最简单server 2.h5接收w ... -
ios的safari使用自制ca证书测试webrtc
2018-08-20 13:31 2441这个需要注意 https://stackoverflow.c ... -
nginx push_upstream模块的websocket
2018-05-04 23:27 1221参考 https://www.rails365.net/art ... -
openresty websocket
2018-04-18 17:08 1519mac安装openresty brew install o ... -
nginx代理wss和https
2018-02-27 15:34 3929nginx启用ssl yum install openssl ... -
nginx模块开发(三)upstream模块
2017-08-20 23:48 845使用nginx-1.13.4版本 三个文件ngx_http_ ... -
nginx模块开发(二) 使用gdb-dashboard调试
2017-08-11 18:47 2010gdb-dashboard或者 gdbgui 或者gdb自带 ... -
nginx模块开发(一)
2017-07-29 22:44 566决定重新整理nginx模块开发 helloworld con ... -
nginx带进度条的上传超大文件
2016-12-12 18:40 387311年写的 http://haoningabc.iteye.c ... -
nginx rewrite替代apache rewrite
2016-10-18 20:30 834清理chrome的缓存 chrome://appcache-i ... -
websocket和tap使用select关联
2016-06-14 22:01 749c语言的socket基础http://haoningabc.i ... -
ffmpeg+nginx 的直播(2,直播摄像头和麦克风)
2016-05-28 20:21 4360假设我的服务器是centos7 192.168.139.117 ... -
ffmpeg+nginx 的直播(1,直播播放的视频文件)
2016-05-26 17:11 659464位操作系统centos7 ############ 1.一 ... -
websocket传传图片
2015-12-25 17:51 7246参考[url]http://www.adobe.com/dev ... -
websocket相关调研 总结帖
2014-12-21 21:53 4028最近把websocket的客户端和服务端使用过的调通的例子总结 ... -
autobahn的helloworld
2014-11-08 18:36 2765python2.7.8可用,python2.6一样的代码就有问 ... -
ios websocket server端
2014-10-22 00:07 2198https://github.com/benlodotcom/ ... -
ios客户端websocket的helloworld
2014-10-09 02:11 23188ios8,xcode6 https://github.com/ ... -
websocket,使用tomcat7转发
2014-10-03 18:40 11740前篇: http://haoningabc.iteye.com ... -
nginx执行流程
2014-04-15 18:35 1081目标:打印nginx执行之后的流程方法 my_debug.c ...
相关推荐
【基于OpenResty的多人聊天室】是一种利用OpenResty技术构建的实时在线交流平台,无需额外的存储设备,即可让多个用户在一个共享空间内进行无痕聊天。OpenResty是一个强大的Web服务系统,它集成了Nginx与LuaJIT,...
本文将详细介绍如何在OpenResty上使用Lua脚本来实现一个简单的"Hello World"示例。 首先,我们需要在本地环境中安装OpenResty。通常,你可以从OpenResty官网下载最新版本的源码包,然后按照官方文档提供的步骤进行...
在本文中,我们将深入探讨如何基于WebSocket构建一个支持多人多聊天室的服务器,以及如何利用OpenResty这一强大的Web服务器平台来实现这一目标。 首先,WebSocket API允许Web应用程序在单个TCP连接上进行全双工通信...
- **Hello World示例**:通过一个简单的示例介绍如何结合OpenResty和Nginx实现一个基本的HTTP服务。 - **Lua模块的使用**:讲解了如何在OpenResty中使用Lua模块,包括如何加载和调用第三方resty库。 - **动态限速与...
OpenResty是一款基于Nginx和LuaJIT的高性能Web平台,它将强大的Lua脚本语言集成到Nginx中,使开发者能够利用Nginx的事件驱动、非阻塞I/O模型处理高并发场景,并提供了丰富的模块集来构建复杂的Web服务。OpenResty ...
OpenResty是一款基于Nginx与LuaJIT的高性能Web平台,它集成了大量开源的高性能库,使得开发者能够利用Lua脚本语言快速构建出强大的动态Web应用。在这个压缩包"openresty-1.19.9.1.tar.gz"中,包含的是OpenResty的...
- **HelloWorld**:通过编写简单的HelloWorld程序来初步了解OpenResty。 ### LuaRestyRedisLibrary - **Redis接口封装**:学习如何简化Redis建连和拆连操作,以及如何实现Redis的发布订阅模式。 - **Lua与Redis交互...
OpenResty(openresty-1.21.4.1.tar.gz) OpenResty是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的...
《OpenResty官方学习资料》是一份由章亦春编写的综合教程,旨在帮助开发者从初识到精通OpenResty这一强大的Web服务框架。OpenResty是基于Nginx和LuaJIT的开源项目,它将Nginx的高性能与Lua的轻量级脚本能力相结合,...
构建简单的Hello World程序是开始实践的第一步。 OpenResty提供了丰富的API来操作HTTP请求和响应,包括获取URI参数、获取请求body、输出响应体等。对于高级应用,还需要掌握如何使用Nginx的内置变量、 ...
OpenResty教程,OpenResty使用教程 OpenResty是大并发服务器的不错选择,可实现数据校验前置、缓存前置、数据过滤、API请求聚合、认证管理、负载均衡、流量控制、灰度发布、降级、监控等功能
### OpenResty安装过程知识点详解 #### 一、OpenResty简介 - **定义**:OpenResty是一款基于Nginx与Lua的高性能Web平台,它使得开发人员能够轻松地编写出高性能、高可靠性的Web应用程序和服务。 - **特点**: - ...
《OpenResty 1.25.3.1 源码详解》 OpenResty 是一个基于 Nginx 的高性能、全功能的 Web 应用服务器和开发平台,它集成了 LuaJIT 脚本语言,允许开发者在 Nginx 的配置文件中直接编写 Lua 脚本来实现复杂的业务逻辑...
此外,我们还会介绍如何编写一个简单的Hello World程序,并通过location指令与Nginx的内置变量进行配合,以实现获取uri参数、获取请求body、输出响应体以及日志记录等功能。 OpenResty不仅支持Lua脚本,还提供了...
这个openresty包是基于官方最新代码 编译好的。 openresty中升级nginx openresty如何升级nginx的版本? Nginx 有RCE 漏洞。 修复nginx 爆出栈溢出rce漏洞,openresty什么时候升级,或者如何单独升级nginx nginx内核...
OpenResty是一个基于Nginx和LuaJIT的高性能Web平台,它允许开发人员使用Lua语言来编写服务器端代码,实现动态处理、高并发的Web应用。标题中的"openresty1.13.6.2"指的是OpenResty的一个特定版本,即1.13.6.2。这个...
OpenResty是一款集成了Nginx和LuaJIT的服务器软件,能够以高效的事件驱动模型处理高并发请求。在OpenResty中,开发者可以利用Lua脚本来实现复杂的业务逻辑,同时使用其内置的高性能缓存机制来提升应用程序的性能。 ...
OpenResty 是一个基于 Nginx 和 LuaJIT 的高性能 Web 平台,它通过提供一个集成了大量 Lua 库的 Nginx 模块,使得开发者可以在 Nginx 中直接使用 Lua 语言编写逻辑处理代码。OpenResty 的优势在于其高性能和灵活性,...
《OpenResty最佳实践》是一本深入探讨OpenResty使用和优化的专业指南,它涵盖了从基础到高级的各种主题,旨在帮助开发者充分利用OpenResty的强大功能。OpenResty是一款基于Nginx和LuaJIT的高性能Web平台,它将Nginx...
通过一个简单的“HelloWorld”示例,可以学习如何在OpenResty中使用Lua脚本接收请求、处理逻辑并输出响应。这个示例通常会结合获取URI参数、请求body以及输出响应体的基本操作。 ### 进阶技巧 #### Lua进阶编程 ...