搞了一整天,现在想了两种方案:
第一种:
//这个办法可以通过把监听事件改变与前端的事件同步,就可以做到消息发送到指定的人。
// 服务端:
`var io = require('socket.io').listen(3001);
io.sockets.on("connection",function(socket){
socket.emit('newss', { hello: 'world' });
socket.on('tanweijie', function (data) {console.log(data);});})
//在前端:
var socket = io.connect('http://localhost:3001');
socket.on('newss', function (data) {
console.log(data);
socket.emit('tanweijie', { my: 'data' }); });`
第二种办法:(这个搞了好一阵子)
//可能代码有点乱,文字说明:
就是每一次有连接的时候把connection返回的对象保存,发送的时候就调用该用户保存的对象 .emit 就可以发送到指定用户
//服务端
var SocketObj = {};
var SocketArray = [];
var x = 0;
var io = require('socket.io').listen(8080);
io.sockets.on('connection', function(socket){//连接成功
SocketObj[socket.id] = socket;
SocketArray.push(socket.id);
socket.on('objmsg', function(data){ //myX用于接收某个用户的消息
console.log(data);
if(data.my.length != 0 & data.my[0] != "" & data.my[1] != ""){
SocketObj[data.my[0]].emit('servermsg', { hello: data.my[1]});//news用于发送消息给某个用户
}
});
console.log(SocketArray);//有那些人连接了
socket.on("disconnect", function(callbackOBJ) {//连接断开
console.log(callbackOBJ);
})
});
//前端
<script>
var socket=io.connect('http://findme.ltd:8080');
socket.on('servermsg',function(data){
console.log(data);
});
var send = function(text){socket.emit('objmsg',{my:text})}
</script>
</head>
<body>
从这里选一个<%= title %>
<input type="text" id="th" placeholder="填入对方ID" />
<input type="text" id="th2" placeholder="对话" />
<input type="button" name="fi" value="send" onclick="var th = [document.getElementById('th').value,document.getElementById('th2').value];send(th);" />
</body>
说白了就是一个保存对象,另一个创建多个监听,如果做一个“一对一”的聊天,应该采用那种?或者说常见的是那种(可能我这两种都不对),如果是做一个“群聊天”,应该用哪种?
采用第2中。
一对一的聊天是这两货开个独立的聊天室,服务端进行中转
A发消息给服务端,服务端广播给聊天室,因为聊天室只有A,B,所以达到了饲料的效果