试图在套接字中执行最简单的目标消息传递。io没有成功。根据插座文件。io与express。js中,您可以使用<code>socket.to(socket.id)将消息指向单个用户套接字。emit('事件名称','消息')
我已经读过套接字了。io文档从头到尾和其他堆栈溢出问答。我发现的一些解决方案涉及创建房间和传递这些房间的消息,但这个问题的目的是使用<code>socket.to(socket.id)向套接字id发送消息。emit('事件名称','消息'),如套接字中所示。io文档。
我使用的是节点v6.11.2、express4.15.2和套接字。io 2.0.3。
客户端和服务器代码几乎一字不差地取自https://socket.io/get-started/chat/在我实验的时候做了一些小的改变。
索引.js
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
app.get('/', function(req, res){
res.sendFile(__dirname + '/index.html');
io.on('connection', function(socket){
console.log(req.ip+' connected');
socket.on('chat message', function(msg){
console.log(socket.id);//logs the socket id. Something like 'AUCyM1tnpinCfvfeAAAB'
console.log(msg);//logs whatever the message was, so I know the server is receiving the message
socket.to(socket.id).emit('chat message', 'Nothing is happening here.');
});
});
});
http.listen(3000, function(){
console.log('listening on *:3000');
});
索引.html
<!doctype html>
<html>
<head>
<title>Socket.IO chat</title>
<style>
...
</style>
</head>
<body>
<ul id="messages"></ul>
<form action="">
<input id="m" autocomplete="off" /><button>Send</button>
</form>
<script src="/socket.io/socket.io.js"></script>
<script src="https://code.jquery.com/jquery-1.11.1.js"></script>
<script>
$(function () {
var socket = io();
$('form').submit(function(){
socket.emit('chat message', $('#m').val());
$('#m').val('');
return false;
});
socket.on('chat message', function(msg){
$('#messages').append($('<li>').text(msg));
});
});
</script>
</body>
</html>
更改此:
socket.to(socket.id).emit('chat message', 'Your message');
对此:
io.to(socket.id).emit('chat message', 'Your message');
如果你愿意,你可以检查这个链接: https://socket.io/docs/emit-cheatsheet/
改变这一点:
socket.to(socket.id).emit(...)
对此:
socket.emit(...)
这里有一个解释。socket.to(socket.id). emit(…)
将广播到名为socket.id
的房间。没关系,有一个房间有这个名字,套接字
是唯一的成员。但是,socket.to()
发送给该房间的所有成员,只有EXCEPT套接字
,所以没有人可以发送它。
因此,如果您只想发送到套接字
,那么只需使用socket.emit()
。
以下是 socket.to()的 socket.io
文档中的引用:
为后续事件发射设置一个修饰符,该事件将仅广播给已加入给定房间(套接字本身被排除)的客户端。
room (字符串) Return Socket for chaining 设置修改器,使得随后的事件导向这样的一种情况:即仅向当前房间的客户端广播消息(主动广播消息的一方除外)。 为了能对多个房间触发同一个广播,你需要给多个房间链式的执行几次to方法。 io.on('connection', (socket) => { // to one room socket.to('others')
(字符串) 标志socket session一个独一无二的符号,在客户端连接到服务器后被设置。 const socket = io('http://localhost'); console.log(socket.id); // undefined socket.on('connect', () => { console.log(socket.id); // 'G5p5...' });
(返回字符串) 一个独一无二的针对当前会话socket的标志,来自下行客户端。
因此,我在一个控制器中有一个非常简单的代码片段,在这个代码片段中,我使用从外部文件中获取数据,它工作得很好!但是当我使用时,我会在控制台中得到一个
问题内容: 正则表达式似乎还可以,因为第一行将子字符串正确替换为“ helloworld”,但是后者却不匹配,因为我看不到“ whynothelloworld?”。在控制台上 问题答案: 期望 整个 字符串匹配,而不仅仅是子字符串。 使用正则表达式匹配器对象的方法代替:
正如Socket.IO 1.0中向特定ID发送消息中所给出的,可以通过使用 在我的Node.js应用程序中,我尝试做同样的事情。基本上,当用户提交另一个socket.id时,Node.js后端将把给定的数据发送给该特定的套接字ID。虽然前端将请求正确地提交给后端,但当我试图将数据发送到id时,它不会通过。代码中“断开”的部分如下所示: 当只使用io.emit而不是io.to(id).emit激发事