Socket.io 使用 node.js,根本没有 express?

     2023-02-26     231

关键词:

【中文标题】Socket.io 使用 node.js,根本没有 express?【英文标题】:Socket.io using node.js with no express at all? 【发布时间】: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 服务器。 【参考方案1】:

确保您通过npm 安装了socket.io,并且还有socket.io 客户端。当然你可以在 CDN 上使用 socket.io 客户端:

<script src="https://cdn.socket.io/socket.io-1.4.5.js"></script>

对于服务器端,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);

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

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

【讨论】:

谢谢!这行得通。我仍然遇到的唯一问题是试图弄清楚如何将端口从 80 更改为 1337,但我很确定我可以在网上的某个地方找到它。我需要这个的原因是我可以使用 localtunnel.me 将本地端口托管给其他人。它似乎不允许我用 80 做这个,可能是由于权限错误。我可能可以环顾四周并解决这个问题,但它有助于了解为什么它会起作用以及如何解决它,无论是哪种方式。 另外,io = socket();没用,但由于某种原因,socket = io();做了:P

Node.js socket.io 没有响应 iOS socket.io 发出请求

】Node.jssocket.io没有响应iOSsocket.io发出请求【英文标题】:Node.jssocket.ionotrespondingtoiOSsocket.ioemitrequests【发布时间】:2016-01-1203:10:07【问题描述】:我似乎无法弄清楚这一点。我正在测试使用socket.io将iOS客户端应用程序与Node.js服务... 查看详情

仅使用 websockets 构建整个站点(通过 socket.io 和 node.js,没有 Ajax)?

】仅使用websockets构建整个站点(通过socket.io和node.js,没有Ajax)?【英文标题】:Buildawholesiteusingjustwebsockets(viasocket.ioandnode.js,noAjax)?【发布时间】:2011-12-2321:52:09【问题描述】:这可能吗?有人试过吗?使用websockets意味着没有ht... 查看详情

在没有 socket.io 的弹性 beanstalk ALB 上具有 websockets 的 node.js 服务器

】在没有socket.io的弹性beanstalkALB上具有websockets的node.js服务器【英文标题】:node.jsserverwithwebsocketsonelasticbeanstalkALBwithoutsocket.io【发布时间】:2020-03-0616:53:54【问题描述】:我正在尝试使用应用程序负载平衡器(ALB)但不使用socket.io... 查看详情

Node.js 如何在快速路由中使用 socket.io

】Node.js如何在快速路由中使用socket.io【英文标题】:Node.jshowtousesocket.ioinexpressroute【发布时间】:2019-10-1716:43:27【问题描述】:在我的一个node.js脚本中,我尝试在快速路由中使用socket.io。我发现了许多类似的问题,并尝试按照... 查看详情

node.js + express.js + socket.io 授权:没有cookie

】node.js+express.js+socket.io授权:没有cookie【英文标题】:node.js+express.js+socket.ioauthorization:nocookie【发布时间】:2011-12-2305:33:43【问题描述】:我无法从我的socket.io授权中获取“cookie”数据。io.configure(function()io.set(\'authorization\',functi... 查看详情

使用 Socket.IO 将 Node.JS 服务器连接到另一个 Node.JS 服务器?

】使用Socket.IO将Node.JS服务器连接到另一个Node.JS服务器?【英文标题】:ConnectaNode.JSservertoanotherNode.JSserverwithSocket.IO?【发布时间】:2018-12-1514:14:21【问题描述】:我正在尝试使用Socket.IO在两个Node.JS服务器之间发送数据。我通常只... 查看详情

Node.js Socket.io Heroku“没有方法‘配置’”

】Node.jsSocket.ioHeroku“没有方法‘配置’”【英文标题】:Node.jsSocket.ioHeroku"nomethod\'Configure\'"【发布时间】:2012-03-2717:21:42【问题描述】:我正在尝试在Heroku上设置socket.io,所以我的主脚本中有以下代码:vario=require(\'socket... 查看详情

在 Heroku 上使用集群和 socket.io-redis 扩展 node.js socket.io@1.*.*

】在Heroku上使用集群和socket.io-redis扩展node.jssocket.io@1.*.*【英文标题】:Scalenode.jssocket.io@1.*.*withclusterandsocket.io-redisonHeroku【发布时间】:2014-11-2505:31:58【问题描述】:有没有人知道在多个内核上扩展基于node.js-socket.io的应用程序... 查看详情

Node.js 使用 socket.io 进行重构

】Node.js使用socket.io进行重构【英文标题】:Node.jsrestifywithsocket.io【发布时间】:2012-10-1713:51:40【问题描述】:是否可以像express和socket.io一样在同一个端口上运行socket.io和restify?我就是这样做的,但是没有用#server.coffeerestify=requi... 查看详情

使用 Socket.IO + Node.js + ZMQ 发送消息时发生内存泄漏

】使用Socket.IO+Node.js+ZMQ发送消息时发生内存泄漏【英文标题】:MemoryleakwhenemittingmessageswithSocket.IO+Node.js+ZMQ【发布时间】:2014-01-0105:34:00【问题描述】:我有三个应用程序相互通信。Websocket服务器(1)接受来自浏览器的连接,解析ur... 查看详情

通过 SSL 使用 Socket.io Node.js 出现网关错误

】通过SSL使用Socket.ioNode.js出现网关错误【英文标题】:BadGatewayErrorusingSocket.ioNode.jsoverSSL【发布时间】:2016-06-1210:27:22【问题描述】:我之前有一个Socket.io脚本在http上运行良好,但升级到https已经破坏了它。我已经在服务器上安... 查看详情

使用 Socket.IO 和 Node.JS 的截屏网站

】使用Socket.IO和Node.JS的截屏网站【英文标题】:ScreencastwebsitewithSocket.IOandNode.JS【发布时间】:2016-01-0109:30:45【问题描述】:我正在尝试实现一个网站的截屏视频,而不需要任何软件,只需要一个浏览器。没有必要对网站进行真... 查看详情

Node.js 和 Socket.IO 在某些服务器中没有响应

】Node.js和Socket.IO在某些服务器中没有响应【英文标题】:Node.jsandSocket.IONotRespondinginSomeServers【发布时间】:2013-06-0216:35:01【问题描述】:我在Nodejitsu上运行了简单的Node.js和Socket.IO应用程序。该应用程序在家里和其他一些Internet... 查看详情

使用 socket.io node.js 和传入消息的通知系统的架构实现和设计

】使用socket.ionode.js和传入消息的通知系统的架构实现和设计【英文标题】:ArchitectureImplementationandDesignforaNotificationSystemusingsocket.ionode.jsandincomingmessages【发布时间】:2011-11-0305:11:21【问题描述】:免责声明我之前没有使用过node.js... 查看详情

node.js 上的 Socket.io-client 只工作一次

】node.js上的Socket.io-client只工作一次【英文标题】:Socket.io-clientonnode.jsworksonlyonce【发布时间】:2012-10-1412:00:37【问题描述】:每当服务器收到请求时,我想在服务器端(使用node.js)创建新的sockei.io-client。但是下面的代码只工作... 查看详情

允许多个用户加入聊天室(使用 Django、Socket.io 和 node.js)

】允许多个用户加入聊天室(使用Django、Socket.io和node.js)【英文标题】:Allowingmultipleuserstojoinachatroom(usingDjango,Socket.ioandnode.js)【发布时间】:2013-04-2102:29:59【问题描述】:我关注thistutorial并创建了自己的数据库等。我能够成功... 查看详情

没有 express.js 的 Socket.io 会话?

】没有express.js的Socket.io会话?【英文标题】:Socket.iosessionwithoutexpress.js?【发布时间】:2012-08-2019:23:21【问题描述】:我想通过node.js和socket.io在websockets上进行会话处理,而不必使用cookie并避免使用express.js,因为应该还有客户端... 查看详情

HTTP 状态代码 200 但页面未加载 Node.js Socket.io -- 使用 Socket.io 的 Node.js 教程,Daniel Nill,fs.readFile(),socket

】HTTP状态代码200但页面未加载Node.jsSocket.io--使用Socket.io的Node.js教程,DanielNill,fs.readFile(),socket.html【英文标题】:HTTPStatusCode200butpagedoesnotloadNode.jsSocket.io--Node.jsTutorialWithSocket.io,DanielNill,fs.readFile(),socket.html【 查看详情