MMO WebSocket服务器:Node.js还是C++?

Luk*_*non 6 javascript c++ performance node.js server

我一直在考虑使用WebSockets为网络制作实时游戏.我知道如何使用Node.js,并且很容易在那里使用它.但在我看来,C++似乎是流行的服务器语言,因为它的速度.

我应该在Node.js中制作它,然后再担心C++,或者我现在应该学习C++并从头开始学习它?

Vin*_*lco 9

如果您决定采用C++路由(并且确实提供了所有语言的最佳性能),那么这个伟大的开源Websocket库可以为您完成所有繁重的工作.它的标题仅使用提升.它附带示例代码和文档:http: //vinniefalco.github.io/

这是一个向echo服务器发送消息的完整程序:

#include <beast/websocket.hpp>
#include <beast/buffers_debug.hpp>
#include <boost/asio.hpp>
#include <iostream>
#include <string>

int main()
{
    // Normal boost::asio setup
    std::string const host = "echo.websocket.org";
    boost::asio::io_service ios;
    boost::asio::ip::tcp::resolver r(ios);
    boost::asio::ip::tcp::socket sock(ios);
    boost::asio::connect(sock,
        r.resolve(boost::asio::ip::tcp::resolver::query{host, "80"}));

    using namespace beast::websocket;

    // WebSocket connect and send message using beast
    stream<boost::asio::ip::tcp::socket&> ws(sock);
    ws.handshake(host, "/");
    ws.write(boost::asio::buffer("Hello, world!"));

    // Receive WebSocket message, print and close using beast
    beast::streambuf sb;
    opcode op;
    ws.read(op, sb);
    ws.close(close_code::normal);
    std::cout <<
        beast::debug::buffers_to_string(sb.data()) << "\n";
}
Run Code Online (Sandbox Code Playgroud)


IlI*_*IlI 5

用于Node.js的谷歌V8引擎可以很好地编译有效的机器代码.除了内存/垃圾收集所需的特别注意之外,Javascript在游戏中使用的性能足够好.,这导致很多原生C++ PC游戏被转换成浏览器javascript游戏.(值得注意的是,简陋的捆绑了一个"Mozilla Bundle",其中有很多这些转换过的JS游戏,包括"AaaaaAAaaaAAAaaAAAAaAAAAA !!!","FTL"等)

使用Node.js和socket.io创建了许多实时游戏服务器.使用node和socket.io运行基本的websocket服务器很容易,因此您应该能够快速构建原型服务器,并进行一些性能测试,以确定它是否足以满足您的应用程序.

  • Socket.io 对于 socket.io 来说很慢 -1。对于nodejs,uWS 大大优于socket.io +1;对于js,uWS 大大优于socket.io +1。结果:+1 (2认同)