如何在 websocket 服务器上向特定用户发送消息

Posted

技术标签:

【中文标题】如何在 websocket 服务器上向特定用户发送消息【英文标题】:How send message on websocket server to specific user( s) 【发布时间】:2016-04-05 13:31:50 【问题描述】:

我正在阅读 websockets,在阅读了很多教程和博客(主要是关于创建一个简单的聊天应用程序)之后,仍然有 1 个问题没有得到解答:

除了使用的技术类型(node.js 或 python 的 php)之外,如果没有首先将客户端事件发送到 websocket 服务器(通常称为 onconnect( ) 或 onmessage() )。

那么是否不可能有一些外部应用程序或事件调用一些脚本(bash 或 php),这些脚本使用现有的正在运行的 websocket 实例向一个或多个连接的浏览器(websocket 客户端)发送/广播一些信息(文本)? ?

对不起,如果这是一个愚蠢的问题,但我无法通过阅读网络上的这些博客找到答案。

感谢您的澄清。

【问题讨论】:

如果有人没有联系你显然不能给他发消息? 你的意思是你只想侵入已经运行的服务器并发送信息,或者我错过了什么? :) 如果您的意思是将发送函数移出 on connect 处理程序 - 当然可以! 我知道最先有一个来自 websocket 客户端的 connect()。到目前为止我明白了。在这个 connect() 上,我可以从 websocket 服务器发送一个回复,比如“欢迎用户!”。但是……这是我最根本的问题:如果我 - websocket 服务器 - 想要向这个用户发送第二条消息“用户,你知道你仍然连接吗?”。如何在没有 websocket 用户先向 websocket 服务器发送内容的情况下发送第二条消息?在这里破解一些东西并不有趣,这是一个严肃的问题。 @Andrey Popov:你说“当然可以!”你能告诉我如何或指向一个解释这个的教程吗? 到目前为止,我想出的唯一可行的解​​决方案是让我的外部应用程序也成为订阅 websocket 服务器的 websocket 客户端。当我的外部应用程序的 ID 发送消息时,我只是执行一些其他逻辑。 【参考方案1】:

据我了解,您可以轻松使用以下套接字:

// main.js
this.sockets = ;
myOtherModule.init(sockets);
io.on('connection', function(socket)) 
    sockets[socket.id] = socket;

    socket.on('command', myOtherModule.onSocketCommand);



// myOtherModule.js
this.init = function(sockets) 
    this.sockets = sockets;

this.onSocketCommand = function() 
    this.sockets['other.socket.id'].emit('message');

您总是可以将套接字保存在某个地方,无论它是在对象中还是在单个变量中。然后您可以随时使用它来发出消息。

【讨论】:

以上是关于如何在 websocket 服务器上向特定用户发送消息的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PHP 服务器上向客户端发送 WebSocket 关闭帧?

如何使用 websockets 通过 Flask 向特定用户发送消息?

如何使用java服务器将消息发送到特定的websocket连接

如何在特定时间通过 websocket 发送消息

.net websocket 如何发送消息给特定的客户端

Websocket发送blob对象而不是字符串