最近在做服务器通信这一块东西,对于openresty也是刚刚接触,正好在网上了解到lua_resty_websocket这个强大的神器,所以就迫不及待的试了一下。
我本意是要实现客户端与服务器实现全双工通信,服务器可以主动向客户端推送消息(单播,广播)
我的思路:
服务器上部署websocket.server,客户端通过发送wss协议去想服务器握手完成订阅。
服务器将过来的连接存储到一个外表中(保持连接的ws),如果断开连接超出可我预设的时间,服务器主动把这个链接从外表中删除。服务器从外表中遍历链接,(启用多个接收线程和一个推送线程)每个链接启用一个轻线程去无间断运行,从而保证能即时的接受来自客户端的消息,存到我预设的shared中进行保存从而达到进程间共享数据的目的,每个数据都是以kv去存的,k为连接的唯一id(自己设置的uuid,够用了);我配了一个服务器用来存储的shared用来存储从服务器推送的数据,里面存的是json字符串,每个字符串中有连个kv,第一个为data(也就是我想推送的数据),第二个为user(就是我想推送给哪个连接),在服务器发http请求会携带这两个kv到推送线程,推送线程会解析json,分出data 和 user 在根据user中的value(也就是每个连接的唯一id)从外表中查找连接,然后进行send_text(),完成推送。单客户端推送没问题,就是多个的时候会出现下面的问题:
看了看server源码,估计是少了什么参数或者思路问题,困扰了很久,虽然对于各位大佬这不是什么大的问题,但是作为一个年轻的程序员来说,可谓是食不下咽呢!还请大家帮忙解惑!谢谢!
下面是我从服务器推送数据的步骤: