繁体   English   中英

C中的Websocket服务器问题

[英]Problems With Websocket Server in C

我需要将NGINX用作WebSocket代理,并且能够顺利运行本教程 在这种情况下,使用ws和Node.js完成一个简单的WebSocket应用程序。 但是,我需要用C语言开发的应用程序替换javascript(server.js)中的代码。

为此,我尝试了本教程中显示的最后一个示例,该示例非常简单易懂。

但是,使用与server.js中相同的端口和配置,在运行编译的C代码时,似乎未正确建立通信。 在这种情况下,当我在客户端的终端上运行wscat时,似乎正在等待某事,因为从未看到“已连接”一词,但通信也未完成(这就是为什么我说它似乎正在等待某事;在其他情况下,例如,如果尝试使用其他端口,则通信已关闭,并且显示为“错误:服务器意外响应”。

另一方面,在服务器端,我可以看到有一个新连接。 我怀疑服务器的答案没有到达客户端,但是我不知道为什么。 Nginx已正确配置,因为在javascript中完成的示例正常工作,并且我在javascript和C中都使用了相同的端口(在server.js中,我拥有:'wss = new WebSocketServer({port:8010});'和从我的角度来看server.c:'server.sin_port = htons(8010);'应该可以工作...)

我已经尝试了C中其他具有类似行为的示例。 谁知道这可能是原因吗? 您是否为WebSocket服务器推荐其他特定的C代码?

您的问题是, websocket和套接字之间有非常明显的区别。 套接字是更底层的网络接口,而WebSocket在某种Web服务器上运行。

我建议为C使用websocket库。:) 这是我在快速Google搜索后找到的库。 该库的文档也可以在这里找到。

@MustacheMoses给出的答案非常关键(我赞成)-套接字和Websocket之间存在巨大差异。

Websockets是一种协议,该协议以HTTP“升级”请求开头,并使用特定的数据打包方案以多路复用消息交换协议继续。

套接字是指较低级别的通信通道(即,流套接字,例如TCP / IP套接字或Unix套接字,甚至是原始套接字)。

我还要指出,与node.js一样,C中的websocket库/服务器也有不同的风格。

有些库提供了几乎是Web框架的方法(例如kore.io或我自己的facil.io微框架 ),而其他库的范围更窄

就像node.js包/服务器(通常用C或C ++编写)一样,它们的性能和功能各有不同(我将在致力于特定方法之前对其进行测试)。

正如@tadman正确指出的那样, 最好坚持使用现有代码库,并使用FFI添加所需的任何C库

使用较低级语言编写高级服务(例如Web应用程序)的情况很少见。

反之亦然,通常不希望使用高级语言来编写低级Web服务器。

这只是我的拙见,但是即使我是用C编写的websocket应用程序框架的作者,也请考虑我正在写这篇文章。当需要编写实际的生产Websocket应用程序时,我通常更喜欢使用facil。 io作为Ruby C扩展并使用Ruby编写应用程序(除非没有Ruby)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM