【发布时间】:2014-05-30 12:38:38
【问题描述】:
我遇到了 socket.io 的问题。我有一个 nodejs 服务器,它充当 web 服务器,同时还运行 socket.io 服务器。此外,我有一个连接到 socket.io 服务器的网页。该网页有一个按钮,单击该按钮会发出时间更新请求。 socket.io 服务器然后将时间(以毫秒为单位)发送回网页,然后更新 div 以显示时间。
这很好用,但是,我注意到我的网络浏览器 (Chrome) 在选项卡中有旋转的加载图标,并且就像网页从未完全加载一样。它还显示“X”以停止加载页面。
如果我单击“X”停止加载页面,我的软件仍然可以正常工作,但我无法弄清楚为什么页面从未完全加载。
服务器代码:
var http = require("http");
var wrHandler = require("./webRequestHandler");
var io = require("socket.io");
var parser = require("./messageParser");
function start() {
function onRequest(request, response){
wrHandler.handle(request, response);
}
var webserver = http.createServer(onRequest).listen(8888);
console.log("Server has started.");
var ioserver = io.listen(webserver);
ioserver.set('log level', 3);
ioserver.sockets.on('connection', function(socket){
parser.parse(socket);
});
}
exports.start = start;
Web 请求处理程序:
var url = require("url");
var fs = require("fs");
function handle(request, response){
var pathname = url.parse(request.url).pathname;
console.log(pathname);
switch(pathname){
case '/':
fs.readFile("../html/index.html", function(error, data){
if(error){
response.writeHead(404);
response.write("This file does not exist.");
}
else{
response.writeHead(200, {"Content-Type": "text/html"});
response.write(data, "utf8");
}
});
break;
default:
fs.readFile("../html" + pathname, function(error, data){
if(error){
response.writeHead(404, {"Content-Type": "text/html"});
response.write("<html><body>This file does not exist!</body></html>");
console.log("Test");
}
else{
response.writeHead(200, {"Content-Type": "text/html"});
response.write(data, "utf8");
}
});
}
}
exports.handle = handle;
消息解析器:
function parseMessage(socket){
socket.on('client_msg',function(data){
var msgID = data.msgID;
switch(msgID){
case "gettime":
socket.emit('timeupdate', {"time": new Date().getTime()});
break;
default: break;
}
});
}
exports.parse = parseMessage;
HTML 页面:
<html>
<head>
<script src="/socket.io/socket.io.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.js"></script>
<script>
var socket = io.connect();
function getTime(){
socket.emit('client_msg', {"msgID": "gettime"});
}
socket.on('timeupdate', function(data){
$("#time").text(data.time);
});
</script>
</head>
<body>
<input type="button" value="Get Server Time" onclick="getTime()"/>
<div id="time">
</div>
</body>
</html>
我应该承认我对 node.js 很陌生,也不是最强大的 javascript 开发人员。非常感谢任何批评/建议/提示。
【问题讨论】:
标签: javascript node.js socket.io