2011-12-24 183 views
6

据我所知,从http://socket.io/#how-to-use,node.js自动服务于服务器上的socket.io文件。Socket.io没有被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 

想法?

+0

“我可以看到它驻留在服务器根目录上一级的node_modules中。” “服务器根”是什么意思?也许不会与apache的任何痕迹混淆? NPM安装的模块驻留在NPM仓库中,它们不必位于与项目的主节点脚本相关的任何地方。成功的'require('socket.io')'表示安装正常,问题出在代码中。 – Kos 2011-12-24 23:09:31

回答

6

试着听听在服务器上后,您将其绑定与socket.io

httpServer.listen(8253); 

将这个

var webSocket = socketIO.listen(httpServer); 
3

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

在您需要以下客户端:

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,不高于服务器的根

+0

我不记得自己需要执行这样的魔法,介绍教程也没有提示。 'npm install socket.io'应该诀窍 – Kos 2011-12-24 23:04:36

+0

顺便说一句,“如果你在Windows上”,现在npm支持windows吗? – Kos 2011-12-24 23:04:47

+0

1/npm在Windows上=> cf stackoverflow文章 - http://stackoverflow.com/questions/7300132/how-to-use-npm-with-node-exe 2/Magic? :)教程讨论npm安装。他们错过了什么,如果你有几个项目有同一个库。那么对于每个项目你去运行npm install?更好的解决方案(imo)是在全局安装'npm install -g',然后创建一个链接到'npm link'。这样你只需要在一个地方安装并升级一个地方。 – 2011-12-25 06:46:23

-1

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

例子:

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

这个提示是有效的,但不是真的这个问题。 Azure对Node应用程序有特定的要求,但这几乎与socket.io无关。 – kubal5003 2017-09-23 20:13:15

1

当你从一个普通快递的应用转换:

一(一个我相信每个人都有:

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

我花了近两个小时的调试这一点,这就是为什么我记录。