【问题标题】:MMO WebSocket Server: Node.js or C++?MMO WebSocket 服务器:Node.js 还是 C++?
【发布时间】:2016-08-18 06:59:08
【问题描述】:

我一直在考虑用 WebSockets 为 web 制作一个实时游戏。我知道如何使用 Node.js,并且很想在那里使用它。但无论我怎么看,C++ 似乎都是流行的服务器语言,因为它的速度很快。

我应该尝试在 Node.js 中实现它,然后再担心 C++,还是应该现在学习 C++ 并从头开始实现它?

【问题讨论】:

  • 除非你在做 CPU 密集型的工作,否则 Node.js 可能没问题。
  • @SLaks,说我在做 Agar.io,哪个更好?

标签: javascript c++ node.js performance server


【解决方案1】:

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

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

#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";
}

【讨论】:

  • 我可以使用您的库来制作 WebSocket 服务器吗?有没有可用的示例代码?
  • 有大量的示例代码! github.com/vinniefalco/Beast/tree/master/example 查看“服务器框架”,它有 WebSocket 服务器(SSL 和非 SSL,以及处理 HTTP 和 WebSocket 的端口)
【解决方案2】:

用于 Node.js 的 Google V8 引擎在编译有效的机器代码方面做得很好。除了special attention required on memory/garbage collection.this lead to a lot of native C++ PC games being converted into browser javascript games 之外,Javascript 获得了足够好的性能用于游戏中。 (值得注意的是,Humble bundle 运行了一个“Mozilla Bundle”,其中包含许多转换后的 JS 游戏,包括“AaaaaAAAaaaAAAaaAAAAAAAAAAA!!!”、“FTL”等)

很多实时游戏服务器都是用Node.js和socket.io.创建的,用node和socket.io很容易得到一个基本的websocket服务器,所以你应该能够快速构建一个原型服务器,并进行一些性能测试,看看它是否足以满足您的应用程序。

【讨论】:

  • Socket.io 对于 socket.io 来说是慢的 -1。 uWS 大大优于 socket.io +1 for nodejs 和 +1 for js。结果:+1
猜你喜欢
  • 1970-01-01
  • 2011-08-13
  • 2014-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-13
  • 2014-07-05
  • 1970-01-01
相关资源
最近更新 更多