Socket.io不被Node.js服务器提供服务

据我了解,从http://socket.io/#how-to-use,node.js自动服务于服务器上的socket.io文件。

我已经使用npm install socket.io ,我可以看到它驻留在服务器根目录以上一级的node_modules

server.js:

  var static = require('./plugins/node-static'); var socketIO = require('socket.io'); var clientFiles = new static.Server('./client'); var http = require('http'); httpServer = http.createServer(function (request, response) { request.addListener('end', function () { clientFiles.serve(request, response); }); }).listen(8253); var webSocket = socketIO.listen(httpServer); webSocket.on('connection', function(client) { ..... 

index.html的:

 <html> <head> <title>Chat</title> </head> <body> <script src="/socket.io/socket.io.js"></script> <script type="text/javascript" src="http://code.jquery.com/jquery-1.5.2.js"></script> <script type="text/javascript"> $(document).ready(function() { var webSocket = new io.Socket('localhost', { port: 8253 }); webSocket.connect(); ....... 

启动服务器工作正常,但是当打开index.html时,我收到以下错误:

 GET http://localhost:8253/socket.io/socket.io.js 404 (Not Found) Uncaught ReferenceError: io is not defined :8253/:25 

想法?

使用socket.io绑定后,尝试在服务器上侦听

放置这个

 httpServer.listen(8253); 

 var webSocket = socketIO.listen(httpServer); 

编辑:道歉,我写了一些没有回答你的问题。

在客户端,您需要以下内容:

 var socket = io.connect(); //Hostname and port not required - Autodetected socket.on('connect', function(){ $('#status').text('Connected'); }); socket.on('message', function(m){ $('#message').text(m); }); socket.on('disconnect', function(){ $('#status').text('Disconnected'); }); 

工作示例=> https://github.com/parj/node-websocket-demo/blob/master/public/main.js

NPM信息(如果需要):如果您在Linux中

 cd <location of your server.js> npm install -g socket.ion #install globally npm link socket.io. #Create a symbolic link 

如果你在Windows上,你不能做npm链接

 cd <location of your server.js> npm install socket.io 

你的目录结构应该看起来像

 server.js node_modules/ #Directory - same level as server.js socket.io #socket.io underneath that 

node_modules应该与server.js位于同一个目录,而不是服务器根目录

从正规快递应用转换时:

 const express = require('express') const app = express() app.listen(3000, function () { console.log('Example app listening on port 3000!') }) 

做两件事很重要:

其中一个(我相信每个人都可以正确的):

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

两个(这个很容易错过):调用server.listen而不是app.listen

我花了近两个小时来debugging,这就是为什么我要logging。

对于在Azure上部署的用户(我无法担保其他任何平台),请确保您的package.json文件包含启动脚本。

例:

 "scripts" : { "start": "node index.js" }