socket.io 是通过什么发送给某个人

搞了一整天,现在想了两种方案:
第一种:
//这个办法可以通过把监听事件改变与前端的事件同步,就可以做到消息发送到指定的人。
// 服务端:

`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>

说白了就是一个保存对象,另一个创建多个监听,如果做一个“一对一”的聊天,应该采用那种?或者说常见的是那种(可能我这两种都不对),如果是做一个“群聊天”,应该用哪种?

阅读 5.6k
1 个回答

采用第2中。
一对一的聊天是这两货开个独立的聊天室,服务端进行中转
A发消息给服务端,服务端广播给聊天室,因为聊天室只有A,B,所以达到了饲料的效果

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题