用 NodeJS 编写的简单 TCP 服务器中的 socket.emit?

2023-12-14

[正如你将看到的,我不太了解 TCP 服务器和客户端的基本概念,可能 socket.emit 甚至不可能,但我想知道最好的替代方案或类似的东西......]

Socket.io 有一个漂亮的东西可以发出事件并在另一端捕获它们,它位于它的首页(http://socket.io)。我可以做类似的事情,但使用 NodeJS 的常规“net”模块吗?如果不是那么相当于什么?

I tried:

服务器.js

var server = net.createServer(function(socket) {
    socket.on("connect",function() {
        socket.emit('test',{msg : 'did you get it ?'});
    });
}).listen(8000);

客户端.js

var client = net.createConnection(8000, localhost);
client.on('connect',function(){
    client.on('test',function(data) {
        console.log(data.toString());
    });
});

但正如你可以想象的那样,它不起作用。我怎样才能做到这一点?

提前致谢。


嗯,net 只是 TCP 的一个接口。要发送和接收消息,您需要在 TCP 之上设计和实现您自己的协议。 TCP是面向流的协议,而不是面向消息的协议。这意味着您必须发明一种让读者分隔消息的方法。分隔消息的最简单方法是在消息之间插入 \n 字符。将消息编码为字节流的最简单方法是使用 JSON.stringify。所以:

客户端.js

var Lazy = require('lazy'), net = require('net')

var client = net.createConnection(8000)

new Lazy(client).lines.forEach(function (msg)
{
    console.log(JSON.parse(msg))    
})

服务器.js

var net = require('net')

var server = net.createServer(function(socket) {
    socket.on("connect",function() {
    var str = JSON.stringify({foo : 'test', msg : 'did you get it ?'}) + "\n"
        socket.write(str)
    });
}).listen(8000);

你可以从这里开始,并进行详细的阐述。例如,您可以在接收方使用 EventEmitter 库类,并在收到不同消息时发出不同的事件。

NPM 上提供了“惰性”模块,用于将接收字节流分割成单独的行。拆分可以手动完成,但需要 20 多行代码。请参阅“脏”NPM 模块的来源,了解拆分的示例实现 - 它很麻烦,因此在这种情况下具有外部依赖项是有根据的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用 NodeJS 编写的简单 TCP 服务器中的 socket.emit? 的相关文章

  • 在 Ubuntu 上将 NodeJS 作为服务运行

    我尝试按照以下步骤将 nodejs 作为服务运行 1 sudo vim servicelocator conf 2 past this conf description node js server author mahmoud elgoh
  • 处理异步时 TcpClient 与 Socket

    这不是另一个 TcpClient 与 Socket 的较量 TcpClient 是 Socket 类的包装器 以简化开发 同时还公开了底层 Socket 仍然 在 TcpClient 类的 MSDN 库页面上 可以读到以下注释 TcpCli
  • Mongoose update 更新数组内的嵌套对象

    我正在尝试查询和更新名册数组 roster schedule monday start 中的元素 然后更新本示例中的值 monday start 这两个键需要是动态的 我认为方法会是这样的 通过 id查找文档 通过 id 在数组中查找匹配对
  • 映射警告时反应唯一键

    我对反应还很陌生 我面临着一个无法解决的问题 这是我的反应组件 import React from react import Header from Header import ContestPreview from ContestPrev
  • 在哪里可以找到 firebase-debug.log 以了解模拟器没有完全关闭的原因?

    我在用firebase emulators start启动 firebase 模拟器 当关闭它时 通过Ctrl C 它告诉我它没有正确关闭 我需要咨询firebase debug log无处可寻 我怀疑它应该位于与云函数相关的所有其他内容所
  • cookie 未在跨域上设置 - AngularJS 和 NodeJS/Express

    跨域请求时未设置 cookie 我的服务器在 localhost 8000 中运行 客户端在 localhost 9000 中运行 服务器nodejs express上的cors设置是 app use function req res ne
  • 如何获取node.js中调用函数的文件路径?

    以下是来自三个文件的一些示例代码 foo js var myFunc require myFunc function foo myFunc message bar js var myFunc require myFunc function
  • 通过 SSH 隧道访问 LDAP

    我通过 SSH 根访问 访问了客户办公室网络内的一台机器 我正在我的计算机上编写一个需要集成到 LDAP 的 PHP 应用程序 LDAP 服务器位于我客户网络的另一台服务器中 并且not可以从外部访问 但是我可以通过可以通过 SSH 连接的
  • 从文件中抓取随机行

    我不知道该怎么做 我应该从哪里开始 我用谷歌搜索了这个 但没有找到关于如何从文本文件中提取随机行的结果 我唯一发现的是https github com chrisinajar node rand line https github com
  • +process 中的加号是 Node.js 域文档中的拼写错误吗?

    在本文档中 http nodejs org api domain html http nodejs org api domain html 这一行出现 var PORT process env PORT 1337 加号是拼写错误吗 如果不是
  • 在 es6 中使用 jsPDF 和 html2canvas

    我正在尝试将 jsPDF 和 html2canvas 与 es6 一起使用 我正在导入 html2canvas 和 jsPDF 但在 addHTML 上出现错误 当我注释掉 addHTML 时 会生成 pdf 有什么线索吗 Thanks j
  • 如何在 sails.js 中维护多个 API 版本

    有人有关于在使用 sails js 时维护 API 的多个版本的想法吗 想象一个简单的例子 例如 Request GET api v1 catVids min view count 10000 Response video title to
  • 在本地主机上设置 (https) SSL 以进行流星开发

    如何创建自签名 SSL 证书以在 mac 10 9 上的本地服务器上使用 我需要我的本地主机作为https localhost 我正在使用 linkedin API 这里解释了需要本地主机上的 ssl 的功能 https developer
  • npm 命令未在请求中发送授权令牌 - 无法进行身份验证

    当我发出 npm 命令时遇到此问题 我收到一条消息 指出它无法通过 npm 注册表 托管在 Azure DevOps 中 进行身份验证 我怀疑这可能是因为它没有生成授权标头并发送它连同请求 例如 当我发出这些命令时 npm ping or
  • Node.js 护照会话 Cookie 域

    我正在使用 node js Passport 并试图弄清楚如何在父域上设置 cookie 以便它可用于子域 用户登录 Domain com 然后用户访问 Sub Domain com 他应该仍然处于登录状态 如何在父域上设置 cookie
  • 授权标头格式错误;区域“us-east-1”是错误的;期待“eu-central-1”

    使用 Node JS 和以下配置文件 accessKeyId XXX secretAccessKey XXXX 区域 eu central 1 签名版本 v4 我仍然收到此错误消息 就好像 aws sdk 尝试访问 us east 1 Re
  • 节点持久-NodeJS

    谁详细向我解释了如何操作以下说明 var storage require node persist var account username Morris password test storage initSync storage set
  • 如何在 ionic 应用程序中使用 socket.io

    我正在使用 ionic 创建一个应用程序cordova and angular 我必须使用 IP 地址和端口号发出请求 到插座 我读过有关 socket io 的内容 我对如何安装感到困惑套接字 io以及如何与 Angular JS 和 N
  • 如何在node.js中找到两个地理点之间的距离?

    如何使用 node js 查找两个地理点 经度和经度的集合 之间的距离 我有使用谷歌地图距离矩阵服务的客户端 JavaScript 代码 我想在服务器端javascript中做同样的事情 在node js router js或datamod
  • 打字稿不适用于 tsconfig.json

    在项目中使用 tsconfig 运行 tsc watch 时 出现以下错误 它需要 Node js 中的 React 和 Redux 类型 error TS2688 Cannot find type definition file for

随机推荐

  • Android 网络服务 GPS 导航

    如何在应用程序导航中显示以查找方向和搜索任何地方 当我们在浏览器中打开谷歌地图时会发生这种情况 但我希望在应用程序中也有同样的情况 None
  • 获取已安装 COM 对象的 GUID

    我有一个 32 位 COM 对象 我想将其与 64 位 PHP 一起使用 我正在尝试按照这里的教程进行操作 http www gfi com blog 32bit object 64bit environment 但我被困在 找到你的 CO
  • ASP.NET Excel导出编码问题

    我正在 ASP NET 网站上进行一些 Excel 导出 除了编码之外 一切正常 当我在 Excel 中打开它时 它看起来像这样 Eingabe Kosten je Ger t Ger t 特殊情况 Betriebsmittel Heiz
  • Bootstrap:更改移动设备上全角列的顺序

    我有这样的架构 col 1 col 2 它们的宽度都是12块 和我的html div class col xs 12 col md 5 1 div div class col xs 12 col md 7 2 div 是否可以在 xs mo
  • 从 VTCompressionOutputCallback 中引用“self”[重复]

    这个问题在这里已经有答案了 我目前正在尝试使用 VideoToolbox 对来自AVCaptureVideoDataOutput 但我在引用时遇到问题self从内部VTCompressionOutputCallback 我的代码如下 var
  • 线程和 GUI 应用程序之间的 Python 新型信号和插槽

    我是 OOP 和 python 的新手 我正在尝试使用新样式的信号和插槽从 Qthread 向 Qt GUI 主窗口发出信号 这就是线程 在单击 GUI 中的 运行 按钮后 3 秒后 我将在 GUI 中发出用于更新消息对话框的信号 我不确定
  • 在Python中序列化二进制数据

    我有一些二进制数据 在 Python 中以字节字符串数组的形式存在 是否有一种可移植的方法来序列化其他语言可以读取的数据 JSON 失败是因为我刚刚发现它没有真正的方法来存储二进制数据 它的字符串应该是 Unicode 我不想使用pickl
  • 在浏览器中执行jdbc小程序

    import java sql import java io import java awt import java awt event import java applet public class A0 extends Applet i
  • 使用连字符时 Spring 表达式语言 (SpEL) 不起作用

    我正在尝试使用 Spring 表达式语言来解析表达式 if myVariable值设置为 first name 带连字符的值 然后获取class org springframework expression spel SpelParseEx
  • 使用 Java 将 ASN1 序列解码为 RSA 公钥

    我有以下 RSA 公钥作为 ASN1 序列 SEQUENCE 2 elem INTEGER 1024 bit 14832 INTEGER 65537 如何在 Java 中将此序列导入为 RSA 公钥 已实施的KeySpecs 例如PKCS8
  • 可以采取哪些措施来防止对返回值进行误导性分配?

    使用 C 多年后 我意识到使用自定义类时语法中的一个怪癖 尽管是正确的语言行为它允许创建非常具有误导性的界面 这里的例子 class complex arg double r double phi public std complex
  • Gulp 注入不起作用

    我尝试使用 gulp inject 将一些文件注入 PHP 文件 这是行不通的 我也尝试过使用 HTML 但这不起作用 我的控制台中的输出显示 gulp inject 6 files into test html 但是没有注入文件 文件数是
  • 在 XCode 11 上哪里可以找到“Log Dyld API 使用情况”和“Log Library Loads”?

    我想在 XCode 控制台中禁用记录动态加载程序事件 dyld 的打印 我找到了解决方案here 但我找不到记录 Dyld API 使用情况 and 日志库加载XCode 11的产品方案诊断中的选项 请帮我找到它们 PS 如果Xcode11
  • getNamedItem() 与 getAttribute() 之间的区别?

    两者都给我一个 XML 元素的属性 他们之间有什么区别吗 添加 W3C 书签文档对象模型核心 作为一个来源 它已经是最好的了 getAttribute 是由Element界面 来自 W3C 获取属性按名称检索属性值 getNamedItem
  • 如何创建包含 xml 和 html 文件的 jar 文件?

    我正在尝试创建一个 jar 文件 其中包含一些所需的类和 java 文件 但我还想包含一些额外的 xml xsl html txt 自述文件 文件 我在 Windows XP 上使用 Eclipse 有没有一种简单的方法可以让我设置目录结构
  • 运行 npm install 时收到“npm ERR!code ELIFECYCLE npm ERR!errno 126”

    我试图在我的服务器上运行 npm install 并收到此错误 gt email protected postinstall home workspace AgreementCancellationProd retrymechanism n
  • 身份验证失败 - 999 - HTTP 状态代码未处理或不允许

    I using scrapy 我想得到忽略响应 URL 我只是在输出控制台中看到 调试 忽略响应 https www mywebsite com gt HTTP 状态代码未处理或不允许 根据文档here您可以添加应该由蜘蛛处理的 HTTP
  • 似乎无法通过 cURL 获取网页内容 - 用户代理和 HTTP 标头均已设置?

    由于某种原因 我似乎无法通过 cURL 获取此特定网页的内容 我已经设法使用 cURL 很好地访问 顶级页面 内容 但相同的自建快速 cURL 功能似乎不适用于链接的子网页之一 顶级页面 http www deindeal ch 子页面 h
  • C++ - stringstream <<“覆盖”

    我正在用 C 制作 OpenGL 游戏 与其他语言相比 我对 C 相当缺乏经验 不管怎样 我为一些图像创建了一个带有 base 目录的字符串流 然后我将此字符串流作为函数参数传递给构造函数 构造函数附加图像文件名 然后尝试加载结果路径 然而
  • 用 NodeJS 编写的简单 TCP 服务器中的 socket.emit?

    正如你将看到的 我不太了解 TCP 服务器和客户端的基本概念 可能 socket emit 甚至不可能 但我想知道最好的替代方案或类似的东西 Socket io 有一个漂亮的东西可以发出事件并在另一端捕获它们 它位于它的首页 http so