NodeJS的简单WebSocket应用程序

时间:2015-05-13 17:17:12

标签: node.js websocket socket.io

我要创建一个简单的 WebSocket 应用程序,等待客户端连接。客户端将是Android用户,应用程序本身就是两个人的简单聊天。因此,对于Android应用程序,我需要知道WebSocket地址(以 ws:// wss:// 开头)。我已经有了一些网站,我安装了nodejs。但是几天之后我完全陷入了困境,以及如何让事情发挥作用。我甚至很高兴看到nodejs捕获任何WebSocket消息,而这就是它。

我阅读了一些关于nodejs和 socket.io 的手册,我再也不知道从哪里获取ws://地址并让它以某种方式工作。

例如,从socket.io chat manual开始,我们有:

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);

app.get('/', function(req, res){
  res.sendfile('index.html');
});

io.on('connection', function(socket){
  console.log('a user connected');
});

http.listen(3000, function(){
  console.log('listening on *:3000');
});

那是否已经是简单的websocket应用程序?在那种情况下,我想要的ws://地址在哪里?也许我应该在我的服务器上上传那堆代码并向 ws://mydomain.com:3000 发送查询?

1 个答案:

答案 0 :(得分:4)

如果您正在使用服务器上的socket.io库,那么您必须在客户端中使用socket.io兼容库,因为它是webSocket上的协议,所以两端都是必须说同一种语言。

构建webSockets(在本例中为socket.io)以共享您​​的Web服务器。因此,对您的服务器的任何webSocket连接请求都只是发送到与您的网络服务器相同的主机和端口。

每个webSocket请求都以http请求开始(因此它由您的Web服务器处理)并且http请求作为请求升级到webSocket协议的标头。当您的Web服务器看到该自定义标头时,它会将控制传递给socket.io库,然后该库响应对webSocket协议的升级是正常的,并且作为http请求开始生命的套接字现在变为套接字, app会说webSocket / socket.io。

socket.io库会自动处理插入您的Web服务器,以便查看这些协议升级请求。

在网页中,连接到此的socket.io客户端代码如下所示:

<script src="/socket.io/socket.io.js"></script>
<script>

var socket = io();  
socket.on('connect', function() {
    // socket.io webSocket connection with your server is now established
});

</script>

socket.io库将自动连接回网页所在的同一主机。您甚至不需要输入网址。