我无法通过Guillermo Rauch本地和cloud9平台上的一个非常基本的socket.io聊天示例(仅对其进行初步测试)在我的机器上运行socket.io。我已经尝试将socket.io与express 2.5.x和express 3(相应地更改服务器代码)相结合,并使用Nodeclipse和命令行运行获得相同的行为:
info:socket.io开始了 在端口上运行@ localhost的套接字服务器 3000
当我访问localhost:3000
时,我得到了:
debug:提供静态内容/socket.io
没有握手,也许客户端没有连接 也许这个问题很容易看到,但我无法在这里和其他地方找到适合我案例的答案。这是我的环境:
Windows 7 x86或Windows 8 64bit; 最新稳定节点上的Nodeclipse(如果我没记错的话,为0.10.15); 使用:google chrome,firefox,IE最新版;
还尝试通过WAMP服务器提供索引页面;
尝试了很多替代方案,这似乎表明它不是代码的问题,而是属于其他东西(表示与最新的节点安装不兼容?环境变量有什么问题?);
express似乎服务于/socket.io/socket.io.js文件,因为当我输入localhost:3000 / socket.io / socket.io.js时,它可以通过任何浏览器读取(我不知道是否这个是正确的考验。)
以下是客户端代码:
<!doctype html>
<html>
<head>
<title>my test</title>
<script src="/socket.io/socket.io.js"></script>
<script src="chat.js">
<link href="/stylesheets/style.css" rel="stylesheet" />
</head>
<body>
<div id="chat">
<ul id="messages"></ul>
<form id="form">
<input type="text" id="input" />
<button>Send</button>
</form>
</div>
</body>
</html>
以下是服务器端应用:
var express = require('express');
var sio = require('socket.io');
var app = express.createServer(
express.bodyParser(),
express.static('public'));
app.listen(3000);
var io = sio.listen(app);
console.log('Socket server running @ localhost on port ' + 3000);
io.sockets.on('connection', function (socket) {
socket.emit('news', { hello: 'world' });
socket.on('my other event', function (data) {
console.log('hello');
});
});
chat.js包含:
window.onload = function() {
var socket = io.connect("http://localhost:3000");
socket.on('news', function (data) {
console.log(data);
socket.emit('my other event', { my: 'data' });
});
};
这些是socket.io和express的版本,通过nodeclipse工作区文件夹(c:/ users / myname / workspace / nameoftheapp)提供的npm install命令在本地安装(express也是全局安装的) “表达”:“2.5.4”, “socket.io”:“0.9.16”
项目结构
node_modules
|- [...] (all the installed folders and files]
public
|- stylesheets
--|-style.css
|- index.html
app.js
package.json
readme.md
我是否必须在连接中设置一些内容才能正确指向我的工作区?
答案 0 :(得分:0)
您需要使用http.createServer
代替express.createServer
var express = require("express");
var http = require("http");
var app = express();
var server = http.createServer(app);
var io = require("socket.io").listen(server);
server.listen(3000, function () {
console.log("listening on port 3000");
});
答案 1 :(得分:0)
我在尝试弄清楚如何在 Cloud9 上使用socket.io时遇到了这个问题。我不知道 Cloud9 如何影响你的问题(虽然在你的标题中提到过),但对我来说,我无法从客户端建立握手,只得到{{1} } Cloud9 终端中的消息。我最终发现它是客户端中导致问题的连接链接。使用socket.io设置Express也不容易,因为你可能会对彼得所说的不同变量感到困惑。
服务器代码:
debug: served static content
客户代码:
var express = require('express'),
http = require("http"),
app = express(),
server = http.createServer(app),
io = require('socket.io').listen(server);
server.listen(process.env.PORT || 3000, function() {
console.log('Express server started on port %s', process.env.PORT);
});
io.sockets.on('connection', function(socket) {
socket.emit('news', {
hello: 'world'
});
socket.on('my other event', function(data) {
console.log(data);
});
});
我使用了<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io.connect(window.location.hostname);
socket.on('news', function(data) {
console.log(data);
socket.emit('my other event', {
my: 'data'
});
});
</script>
,因此该脚本既适用于 Cloud9 测试服务器,也适用于我部署应用的任何地方(在我的情况下, Heroku )。
与window.location.hostname
和Express 3.2.6
一起使用。