Socket.io 使用 node.js 而根本没有快递?

Pro*_*mah 6 javascript node.js express socket.io server

所以我想使用 socket.io 创建一个 node.js 服务器,但我更像是一个初学者,并且发现 express 包在语法上相当混乱。我知道我应该学习如何使用 express 和 app.js,但计划在我达到 node.js 仅包含 http、js 和 socket.io 包的能力范围之后再学习。我在网上看了将近一个小时,但没有什么可以解决我的问题。我在 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');
Run Code Online (Sandbox Code Playgroud)

现在,我的主要 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>
Run Code Online (Sandbox Code Playgroud)

如果需要更多文件,请告诉我应该包含哪些文件,尽管我确实假设问题出在这两个文件之一中。提前致谢,

-迷宫

Han*_*ung 8

确保你安装了 socket.ionpm并有 socket.io 客户端。当然你可以在 CDN 上使用 socket.io 客户端:

<script src="https://cdn.socket.io/socket.io-1.4.5.js"></script>
Run Code Online (Sandbox Code Playgroud)

对于服务器端,socket.io 应该引导app实例而不是http. 例如:

var http = require('http');
var socket = require('socket.io');
function server()...
app = http.createServer(server);
io = socket(app);
app.listen(80);
Run Code Online (Sandbox Code Playgroud)

默认情况下,它们使用端口 80,因此在客户端,它们只是像这样指向 localhost var socket = io('http://localhost');。如果您想使用其他端口,您也必须在io客户端实例化中进行更改。

var socket = io('http://localhost:1337')

  • 另外,io = socket(); 没有用,但由于某种原因,socket = io(); 做了:P (2认同)