【发布时间】:2017-05-01 18:07:29
【问题描述】:
所以我想使用 socket.io 创建一个 node.js 服务器,但我更像是一个初学者,并且发现 express 包在语法上相当混乱。我知道我应该学习如何使用 express 和 app.js,但计划在我达到只有 http、js 和 socket.io 包的 node.js 的能力范围后才这样做。我在网上看了将近一个小时,没有任何东西可以解决我的问题。我对 socket.io 的主要问题是在客户端,函数 io();不管用。我什至尝试将 body 标记上方的脚本链接的路径重定向到我的服务器项目目录中的一个文件,但这只是返回了一个错误,说 require();不是函数。我在这面文字墙下包含了一些我正在使用的文件(但不是全部)。如果格式不正确或不正确,请原谅我,因为这是我第一次使用堆栈交换来提问。出于这个原因,如果您有足够的声誉来编辑它以使其更适合您在此处遵循的格式,请这样做。
首先,我的服务器文件:
const http = require('http');
const fs = require('fs');
const io = require('socket.io')(http);
function socketReq(soc){
soc.emit("test", {"user":"test", "text":"testing da socket"});
}
io.on("connection", socketReq);
function server(req,res){
console.log('A user tried to connect to mazeserver.localtunnel.me'+req.url)
if(req.url == '/'){
console.log('Sending html...');
res.writeHead(200, {"Context-Type":"text/html"});
fs.createReadStream('./index.html').pipe(res);
}else if(req.url == '/pong.js'){
console.log('Sending JS...');
res.writeHead(200, {"Context-Type":"text/JavaScript"});
fs.createReadStream('./pong.js').pipe(res);
}else {
console.log('Error 404: file .'+req.url+' not found');
res.writeHead(404, {"Context-Type":"text/html"});
fs.createReadStream('./404.html').pipe(res);
}
}
http.createServer(server).listen(1337);
console.log('Server created');
现在,我的主 html 文件:
<html id='html'>
<head>
<title>Maze server</title>
<center>
<hr><br>
<h1>Welcome to my test server!</h1>
<br><hr>
<p>This is some text to test</p>
</center>
<script type='text/JavaScript'>
document.getElementById('html').style.hide = "true";
document.onload = function(){
document.getElementById('html').style.hide = "false";
}
var clicks = 0;
function clickButton(){
clicks++;
document.getElementById('clicks').innerHTML = clicks;
}
</script>
</head>
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io();
</script>
<body>
<center>
<button onClick='clickButton();'>Im a button</button>
<p>You've clicked me <span id='clicks'>0</span> times. Ouch!</p>
<br><hr>
<p>Test canvas:</p>
<canvas id='canvas' width='400' height='200'></canvas>
<script src='pong.js' type='text/JavaScript'></script>
<br>
<br>
<button onClick='bounce();'>Bounce!</button>
<br>
<button onClick='speed("x");'>Speed up X</button>
<button onClick='speed("y");'>Speed up Y</button>
<br>
<button onClick='speed("x"); speed("y");'>Speed up both</button>
<br>
<button onClick='resetXY();'>Reset</button>
<br><hr>
</center>
<p>"Copyrite" <strong><blink type='EasterEgg' mazeiness='true'>MazeOfEncryption</blink></strong> 2048. Because why the heck not.</p>
</body>
</html>
如果需要更多文件,请告诉我应该包含哪些文件,尽管我确实假设问题出在这两个文件之一。提前致谢,
-迷宫
【问题讨论】:
-
您可以查看 socket.io 规范以找出方法。因为在附加到
express时,它添加了几个路由来处理一些握手 POST 和 GET 请求。 -
所以基本上我需要添加一些东西才能让它在没有快递的情况下正常工作?你能说得更具体点吗?
-
就在 socket.io 文档中:socket.io/docs/#using-with-node-http-server。 Socket.io 带有一个普通的 http 服务器,没有快递。或者甚至不创建自己的 Web 服务器:socket.io/docs/#using-it-just-as-a-cross-browser-websocket(socket.io 自己创建一个)。仅供参考,如果您需要处理 socket.io 以外的 URL,Express 实际上就这么简单。如果没有,那么您可以使用带有 socket.io 的普通 http 服务器。
标签: javascript node.js express socket.io server