2016-04-25 2 views
6

Я подумывал о создании в режиме реального времени игры с WebSockets для Интернета. Я знаю, как использовать Node.js, и есть соблазн сделать это там. Но везде, где я смотрю, C++, кажется, популярный серверный язык из-за его скорости.MMO WebSocket Server: Node.js или C++?

Должен ли я сделать это в Node.js, и беспокоиться о C++ позже, или я должен изучить C++ сейчас и сделать его там с нуля?

+0

Если вы делаете CPU переплете работу, Node.js, вероятно, хорошо. – SLaks

+0

@SLaks, скажем, я делал Agar.io, что было бы лучше? –

ответ

5

Двигатель Google V8, используемый для Node.js, отлично справляется с компиляцией эффективного машинного кода. Javascript получает достаточно хорошую производительность, которая будет использоваться в играх, кроме special attention required on memory/garbage collection. и this lead to a lot of native C++ PC games being converted into browser javascript games. (в частности, скромный пакет запускал «Mozilla Bundle», в котором было много этих преобразованных игр JS, в том числе «AaaaaAAaaaAAAaaAAAAaAAAAA !!!», «FTL» и т. д.)

Создано множество серверов игр в реальном времени с Node.js вместе с socket.io.. Легко получить базовый сервер websocket, работающий с узлом и socket.io, чтобы вы могли быстро создать прототип сервера и провести некоторое тестирование производительности, чтобы убедиться, что этого будет достаточно для вашего заявление.

+1

Socket.io медленный -1 для socket.io. uWS значительно превосходит socket.io +1 для nodejs и +1 для js. Результат: +1 – Ismail

9

Если вы решите пойти на C++-маршрут (и это обеспечивает лучшую производительность любого языка), есть эта большая библиотека Websocket с открытым исходным кодом, которая делает все тяжелые работы для вас. Его заголовок - только и использует только повышение. Он поставляется с примером кода и документации: 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"; 
} 
+0

Могу ли я использовать вашу библиотеку для создания сервера WebSocket? Есть ли какой-нибудь пример кода для этого? –

+1

Есть ТОНЫ примера кода! https://github.com/vinniefalco/Beast/tree/master/example Проверьте «сервер-инфраструктура», что у него есть серверы WebSocket (SSL и не SSL, а также порты, обрабатывающие как HTTP, так и WebSocket) –

Смежные вопросы