我正在构建一个简单的聊天应用程序,我一直试图用Flask-SocketIO向房间发送消息。
来自客户端的“mesage_event”事件很好地到达服务器,但是,我在客户端看不到任何东西。我不知道服务器是否向房间发射了一些东西,但是在客户端,我看不到控制台中的任何东西。我只能成功的发送给所有的客户端与广播。
这是我在服务器端的代码:
@socketio.on("send msg")
def sendsocket(data):
print("send msg start:", data["msg"])
msg = data["msg"]
room = data["room"]
emit("message_event", msg, room = room)
以及客户端:
1-用于发送消息:
socket.emit('send msg', {'msg': msg, 'room': room})
2-用于触发事件处理程序:
socket.on('message_event', data => {
console.log("message received:", data);
});
不知道为什么发送和发射功能从flask_socketio不工作。如果我使用ocketio(套接字实例),它将成功发送消息。
socketio.emit('EVENT_NAME', data, to='YOUR_ROOM')
你错过了两件事。
首先,您需要向服务器发送一个“join”
事件。
<script>
function joinRoom() {
console.log("ask server to join room");
socket.emit("join", { "user": Date.now(), "room": "Notifications" });
}
</script>
<body>
<button onclick="joinRoom()">Join</button>
</body>
例如,这里我将触发器连接到一个按钮上。为了使最初测试向文件室添加用户更容易,我使用了Date。现在()
作为用户名。您可以打开不同的选项卡作为不同的用户。
第二,您需要有一个处理该连接
事件的处理程序。
在Flask-SocketIO文档的房间和命名空间部分有一个例子。
@socketio.on("join")
def on_join(data):
user = data["user"]
room = data["room"]
print(f"client {user} wants to join: {room}")
join_room(room)
emit("room_message", f"Welcome to {room}, {user}", room=room)
在处理程序中,需要调用join\u room
方法将用户添加到当前命名空间下的文件室中。请注意关于名称空间的那部分。默认情况下,所有连接都位于根(/
)命名空间下。如果您有自定义名称空间,那么每个名称空间都有自己的文件室。
还有一个相应的离开房间
方法。
以下是完整的服务器端代码:
@socketio.on("connect")
def connect():
print("client wants to connect")
emit("status", { "data": "Connected. Hello!" })
@socketio.on("join")
def on_join(data):
user = data["user"]
room = data["room"]
print(f"client {user} wants to join: {room}")
join_room(room)
emit("room_message", f"Welcome to {room}, {user}", room=room)
以下是完整的客户端代码:
<script type="text/javascript" charset="utf-8">
const socket = io();
socket.on("connect", () => {
console.log("connect");
});
socket.on("status", (status) => {
console.log("received status: " + status.data);
});
socket.on("room_message", (msg) => {
console.log("message from room: " + msg);
});
function joinRoom() {
console.log("ask server to join room");
socket.emit("join", { "user": Date.now(), "room": "Notifications" });
}
</script>
<body>
<button onclick="joinRoom()">Join</button>
</body>
现在,您可以打开多个选项卡并将每个选项卡连接到服务器。服务器端应显示以下消息:
client wants to connect
client wants to connect
client wants to connect
client 1582428076724 wants to join: Notifications
client 1582428080023 wants to join: Notifications
client 1582428082916 wants to join: Notifications
在第一个用户加入聊天室时(1582428076724),您应该能够看到其他用户加入聊天室时的日志。
connect
received status: Connected. Hello!
ask server to join room
message from room: Welcome to Notifications, 1582428076724
message from room: Welcome to Notifications, 1582428080023
message from room: Welcome to Notifications, 1582428082916
问题内容: 我试图将字符串消息发送到在weblogic服务器中创建的JMS队列中。我使用Eclipse IDE,当我运行Web应用程序时,出现以下错误,tomcat服务器关闭。错误是 请帮助我。谢谢和最诚挚的问候 问题答案: 基于对该问题的一些快速研究,它似乎是由于在应用服务器和客户端之间使用不同的JDK级别引起的。我看到的大多数示例都表明,在Java 5上运行Weblogic时在客户端上使用Ja
我使用的是Simado GDT11调制解调器和丰富的USB到串行端口驱动程序。新连接出现在我的设备管理器中 我使用的是smslib示例中指定的基本类,但总有一些错误表明设备没有响应。由于使用USB端口,我添加了轮询参数,但没有效果。Commtest实用程序可以连接到同一个端口,所以我认为端口号不是问题。 Stacktrace: 代码:
在socket.io中,如果要将消息发送到特定的房间,通常在服务器端使用特定的语法:。 但是客户机(我指的是在浏览器中运行的socket.io相关代码)如何指示消息应该发送到特定的房间? 还是socket.io客户端库也为此目的提供了特定的语法? 编辑:澄清一下,我上面的建议似乎起作用了,我只是不确定是否有更好的解决方案。
我的机器人不能发送嵌入或常规文本信息,代码执行,但没有什么是发送在不和谐的通道。我遵循了JDA维基的设置,我不知道我做错了什么。 机器人登录码
问题内容: 我正在尝试创建一个群集以将消息发送到远程控制。我已经按照此处所述配置了所有内容。我正在机器上运行它,并且使用shell可以正常工作。在Windows计算机上按照教程中的说明编写Java代码后,我收到以下错误: 我也尝试在其他Linux机器上运行jar,但仍然收到相同的错误。 可以在安装kafka的计算机中将地址更改为jar并在其中运行Java代码。 我相信它与配置有关,但是找不到。 问
Google::API::ClientError(InvalidArgument:需要收件人地址) 我检查过用ruby gmail api V0.9发送电子邮件,我也发现了这一点,但它使用了类,而我在gmail api ruby客户端库中找不到。当前,包含字符,但我在没有它的情况下对它进行了测试,结果它不起作用。 而且,我还想在邮件中发送附件。
我使用这个聊天室示例作为参考,设置了一个多房间的socket.io/nodeJS聊天服务器: https://raw.githubusercontent.com/socketio/socket.io/master/examples/chat/index.js 我使用这个doc将代码从单间修改为多间: https://socket.io/docs/roams-and-namespaces/ 我还修改
我阅读了关于用户目的地的Spring文档。我想使用方法仅向特定用户发送消息。 这是java代码: 这是客户端js代码: 首先,考虑用户价值是否正确? StampClient.connect("myuser",... 为什么这个测试不起作用?此用户未收到任何消息。如果我将目的地切换到,并将方法更改为,这将起作用,但显然是作为广播,而不仅仅是根据请求发送给特定用户。 我试图设置一个回复单用户与此代码: