大家好,我刚开始学习使用openresty写简单的游戏服务器。
我想实现一个功能,就是当A客户端传来一条消息,服务器需要把反馈的信息传给A客户端,同时也需要传给和A对战的B(和C,D,E等等)客户端。
类似的场景还有聊天室等等。
我目前的实现方式是,服务器维护一个table,保存所有客户端与服务器建立的websocket。每收到任意客户端传来的消息,服务器就遍历这个table,把反馈的消息传出去。
但事实证明这样做是不行的。如果消息是A客户端传来的,那么服务器也只能成功向A发回反馈,而无法成功向其他客户端发送反馈,且那些websocket会直接因为错误而关闭(bad request)。
GitHub上似乎有人遇到了和我类似的问题:https://github.com/openresty/lua-resty-websocket/issues/8,春哥表示不能跨request来直接操作cosocket对象,但却好像没有给出明确的做法。我找了好久也没找到简单的解决方案,因此特意科学上网来请教各位大牛了,谢谢!
最后还有个相关问题:以上的场景是只有一个worker process的,也就是所有客户端都连接到这个worker上。如果需要跨worker,又要如何实现呢?再次谢谢各位!