WebSocket.send() 参数

27

通常,我们只会在websocket.send()方法的参数中放置想要发送的数据,但我想知道是否有其他类似IP的参数可以放在括号里。我们可以这样使用吗:

websocket.send(ip, data);  // send data to this ip address

我应该调用其他的方法吗?


4
您不能仅传递地址,因为首先需要使用websocket = new WebSocket(addresss)建立连接。.send只有一个参数 - pimvdb
我已经建立了连接。如果我想向特定的IP地址发送数据,我该怎么做? - Ivy
两个IP地址之间建立连接。如果您想向特定的IP地址发送数据,请先建立到该地址的连接。服务器不会建立连接,只有客户端可以建立连接,但是如果您有多个连接打开,则服务器可以选择要在哪个连接上发送内容。 - Denys Séguret
连接已绑定到特定地址,您应该将其传递给WebSocket构造函数。那么,“服务器向特定IP地址发送数据”是什么意思呢?服务器可以将数据发送到连接到它的套接字之一——您可能不需要在服务器端编写特定的地址。 - pimvdb
客户端与服务器建立连接,服务器根据您编写的程序路由数据。 是的,您需要一些方式来跟踪用户和谁得到了什么。 - user1382306
显示剩余8条评论
1个回答

55

据我理解,您希望服务器能够将客户端1的消息发送给客户端2。由于WebSocket连接的两端必须有一端是服务器,所以您无法直接连接两个客户端。

以下是一些类似于伪代码的JavaScript:

客户端:

var websocket = new WebSocket("server address");

websocket.onmessage = function(str) {
  console.log("Someone sent: ", str);
};

// Tell the server this is client 1 (swap for client 2 of course)
websocket.send(JSON.stringify({
  id: "client1"
}));

// Tell the server we want to send something to the other client
websocket.send(JSON.stringify({
  to: "client2",
  data: "foo"
}));

服务器:

var clients = {};

server.on("data", function(client, str) {
  var obj = JSON.parse(str);

  if("id" in obj) {
    // New client, add it to the id/client object
    clients[obj.id] = client;
  } else {
    // Send data to the client requested
    clients[obj.to].send(obj.data);
  }
});

变量 obj = JSON.parse(str); 这行代码会返回一个“undefined”错误,你知道为什么吗?我正在使用 Chrome 20 beta。 - Ivy
1
@Amy:这是伪代码;str 应该指代从客户端接收到的数据。我不知道你使用的是哪个库,所以你需要参考它的文档来查看如何获取数据。 - pimvdb
1
在客户端代码中,我猜你应该在发送之前等待onopen回调。 - Emanuele Fumagalli
服务器对象是什么? - Sandip Jadhav

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接