import json
from gevent import monkey
monkey.patch_all()
from flask import Flask, render_template
from werkzeug.debug import DebuggedApplication
from geventwebsocket import WebSocketServer, WebSocketApplication, Resource
flask_app = Flask(__name__)
flask_app.debug = True
class ChatApplication(WebSocketApplication):
def on_open(self):
print("Some client connected!")
def on_message(self, message):
if message is None:
return
message = json.loads(message)
if message['msg_type'] == 'message':
self.broadcast(message)
elif message['msg_type'] == 'update_clients':
self.send_client_list(message)
def send_client_list(self, message):
current_client = self.ws.handler.active_client
current_client.nickname = message['nickname']
self.ws.send(json.dumps({
'msg_type': 'update_clients',
'clients': [
getattr(client, 'nickname', 'anonymous')
for client in self.ws.handler.server.clients.values()
]
}))
def broadcast(self, message):
for client in self.ws.handler.server.clients.values():
client.ws.send(json.dumps({
'msg_type': 'message',
'nickname': message['nickname'],
'message': message['message']
}))
def on_close(self, reason):
print("Connection closed!")
@flask_app.route('/')
def index():
return render_template('index.html')
WebSocketServer(
('0.0.0.0', 8000),
Resource([
('^/chat', ChatApplication),
('^/.*', DebuggedApplication(flask_app))
]),
debug=False
).serve_forever()
@flask_app.route('/')
def index():
chat_application = ChatApplication()
chat_application.broadcast("A new user on the page!")
return render_template('index.html')
chat_application = ChatApplication()
TypeError: __init__() missing 1 required positional argument: 'ws'
我想出来了。
通过像这样启动服务器
server = WebSocketServer(
('0.0.0.0', 8000),
Resource([
('^/chat', ChatApplication),
('^/.*', DebuggedApplication(flask_app))
]),
debug=False
)
server.serve_forever()
您可以访问所有客户端并向它们发送如下所示的消息
for client in server.clients.values():
client.ws.send("whatever you want to send")
为了实现广播消息这一功能,简单的添加一个broadcast标志给emit和send方法的calls,广播意味着发送一个给所有socket(客户端)的消息,不过除了触发这一广播消息的socket(客户端)之外。 服务器端(app.js) var io = require('socket.io')(80); io.on('connection', function (socket) { sock
问题内容: 所以现在,我正在制作一个基于客户端服务器应用程序的多线程。在服务器端,我为接受的每个连接创建了一个线程。 在线程类中,我创建了一种将命令发送到客户端的方法。我只想要的是如何将参数发送到所有正在运行的客户端?为简单起见,我只想使此服务器向所有连接的客户端发送消息。 我已经阅读了这篇文章,并从此链接中找到方法。但是,当我尝试使用自己的代码时,中没有类似的方法。 好的,这是我的服务器和线程示
在文档的socket.io客户端套接字部分http://socket.io/docs/client-api/#io#socket指的是套接字文档,这意味着服务器套接字对象和客户端套接字对象是相同的。
问题内容: 我正在构建一个实时Web应用程序。 我希望能够从python应用程序的服务器端实现发送广播消息。 这是设置: 客户端上的 socketio.js TornadIO2 服务器作为Socket.IO服务器 *服务器端的 *python ( Django 框架) 我可以成功地将socket.io消息从客户端发送到服务器。服务器处理这些并可以发送响应。在下文中,我将描述我是如何做到的。 当前设
我后来理解对了。实际上,我需要一条来自android客户端的MQTT消息发送到所有其他客户端,所以我想在消息正文中包含publish关键字,这是非常错误的。MQTT本身将接收到的消息发送给所有提供的客户端,如果客户端订阅了该主题的话。
问题内容: 这段代码一切正常(将其缩短以便更好地阅读)。 当向服务器发送请求时,服务器会立即响应他。但是,其他客户端看不到响应消息。 因此,我想进一步说明:当客户端向服务器发送请求时,服务器将响应所有客户端,以便所有客户端都能看到消息。 我怎样才能做到这一点?有任何示例或不错的入门教程吗? 提前致谢! 服务器: 问题答案: 您必须使用连接池将消息广播到所有连接。您可以将其用作教程/示例http:/