Node.Js + Socket.IO so với SignalR và C # WebSocket Server


75

Tôi hiện có một ứng dụng máy chủ TCP được viết bằng .Net nhận và gửi tin nhắn cho máy khách. Tôi đang xem xét việc xây dựng một ứng dụng web nên cần lớp giao tiếp.

Tôi đã xây dựng một ứng dụng Node.JS + Socket.IO kết nối với máy chủ TCP của tôi và sau đó đẩy giao tiếp đến ứng dụng web và tất cả đều hoạt động tốt.

Tôi vừa đọc về SignalR như một giải pháp thay thế để giữ nó trong ngăn xếp .Net.

Tuy nhiên, tôi cũng nhận thấy rằng tôi có thể viết C # Websocket Server, một bản demo cơ bản ở đây

Tôi giả định rằng máy chủ cơ bản này là SignalR nhưng rõ ràng là có nhiều chức năng hơn trong đó?

Điều tôi đang cố gắng quyết định là tôi chỉ nối ứng dụng TCP hiện tại của mình với máy chủ Websocket hay tôi đi xuống một tuyến SignalR hoặc Node.js riêng biệt? Bạn không quan tâm đến việc ứng dụng SignalR chạy như thế nào, nó là dịch vụ Windows, ứng dụng bảng điều khiển hay dịch vụ IIS?


1
Để biết thông tin, bạn cũng có thể dùng thử SuperWebSocket. Hiện tại, tôi chỉ viết một máy chủ WebSocket trực tiếp. Chỉ có 2 giao thức chính đang chơi (phần còn lại là các biến thể hầu như giống hệt nhau), vì vậy nó không lớn. Một phần tôi đang chờ đợi .net 4.5 / win8, bao gồm hỗ trợ máy chủ WebSocket OOTB.
Marc Gravell

@MarcGravell Cảm ơn. Đây là bài đăng hiển thị máy chủ .Net 4.5 Websocket marcinbudny.blogspot.com/2011/10/… Tôi không chắc máy chủ chạy như thế nào.
Jon

1
Đừng quên socket.io mà không nhiều hơn chỉ WebSockets, nó cũng làm dự phòng để lâu bỏ phiếu vv
mtsr

1
@MarcGravell Một năm sau. bạn thích cái nào hơn (sau khi trải nghiệm signalR vs2012 và nút)?
Royi Namir

2
@Royi Tôi sẽ trả lời điều đó một cách gián tiếp: chúng tôi vẫn là máy chủ socket tùy chỉnh của mình và dự định phát hành mã dưới dạng F / OSS
Marc Gravell

Câu trả lời:


78

SignalR giống như Socket.IO ở chỗ nó hỗ trợ đàm phán / dự phòng truyền tải. Nó là một khuôn khổ chứ không phải một máy chủ, vì vậy bạn cần lưu trữ nó trên một máy chủ nào đó. Chúng tôi có các máy chủ cho ASP.NET, OWIN (ví dụ: Kayak) và máy chủ tự lưu trữ, vì vậy bạn có thể chạy nó trong quy trình của riêng mình một cách dễ dàng, ví dụ như dịch vụ Windows.

SignalR đã hỗ trợ máy khách cho các trình duyệt (JS), .NET, Windows Phone 7 và Silverlight. Ngoài ra còn có các ứng dụng khách được đóng góp cho những thứ như iOS, Mono Touch, v.v.

SignalR sẽ cung cấp cho bạn một API cấp cao hơn nhiều so với các ổ cắm thô, đó là lợi thế lớn của nó, cho phép bạn thực hiện những việc như "RPC" từ máy chủ đến máy khách theo kiểu truyền phát (hoặc được nhắm mục tiêu).


21

Các hàm ý khác

Tôi đã sử dụng cả hai công nghệ và làm việc trên cả hai mặt của .NET / node stack.

  1. Mặc dù tôi thích mặt nút ngày nay, nhưng nếu bạn chỉ làm việc trong .NET, SignalR là sự lựa chọn rõ ràng. Ngược lại, nếu bạn xây dựng tất cả các dự án của mình trong nút, tôi sẽ sử dụng socket.io hoặc sockjs . Nếu phạm vi của bạn đủ hẹp để bạn không cần phải lo lắng về các khoản dự phòng và đại loại như vậy, tôi khuyên bạn nên kiểm tra mô-đun ws vì nó đơn giản hơn và nhẹ hơn tùy thuộc vào các phụ thuộc của bạn. Trong quá khứ, socket.io đã từng là một nỗi đau trên Windows do sự cố cài đặt với node-gyp không thể cài đặt các phụ thuộc gốc ( node-gyp yêu cầu nhiều bước cấu hình khác nhau tùy thuộc vào phiên bản Windows bạn có nhưng bắt buộc đối với C ++ mô-đun được xây dựng bản địa). CẬP NHẬT Bit Windows này không còn liên quan nhiều nữa nhờwindows-build-tools .
  2. Nếu bạn có bộ cân bằng tải và đang lên kế hoạch chạy SignalR, bạn sẽ cần thiết lập SQL hoặc Redis làm bảng nối đa năng để bỏ qua bộ cân bằng tải. Bạn sẽ gặp các vấn đề tương tự cần giải quyết ở phía socket.io và có [nhiều phương pháp được hỗ trợ] [1] (1 trong số đó cũng là phương pháp redis).

Cập nhật - thông tin jquery bị xóa vì nó không còn áp dụng


3
Trên thực tế, thư viện máy khách SignalR JavaScript 2.2.0 (được phát hành vào tháng 1 năm 2015) hỗ trợ bất kỳ phiên bản nào của jQuery> = 1.6.4. tức là bạn sẽ không phải sao chép các phiên bản jQuery (dù sao cũng sẽ bị hỏng). Tôi vừa xác minh đây là trường hợp của một ứng dụng trò chuyện mẫu chạy trong Chrome, IE và Firefox với ứng dụng khách SignalR JavaScript phiên bản 2.2.0 và jQuery 2.1.4. Ngoài ra, rất có thể hầu hết các trình duyệt đều có một bản sao tương thích của jQuery được lưu trong bộ nhớ cache.
dmcquiggin

1
Đối với những người chưa biết, SignalR hiện là một dịch vụ được cung cấp bởi Azure, người quản lý khía cạnh khả năng mở rộng của nó cho bạn. Họ cũng có một tầng miễn phí để chơi xung quanh.
Shayan C

15

Phát triển một máy chủ TCP an toàn có thể mở rộng / luồng có thể không phải là một nhiệm vụ dễ dàng. Mặt khác, có rất nhiều tài nguyên tốt trên internet để bắt đầu của riêng bạn. Ví dụ, nếu bạn chỉ đang tìm kiếm một số dự án WebSocket mã nguồn mở tốt, lời khuyên của tôi sẽ là;

Dự án giả kim thuật : Thư viện C # WebSocket nguồn mở

Dự án Fleck : Thư viện C # WebSocket nguồn mở

SignalR có thể tốt nhưng nó cần Windows Server 8 / IIS 8 để cung cấp tính năng WebSocket.

Về mặt sản phẩm thương mại, đặc biệt là xem xét tính năng websocket không có sẵn trên tất cả các trình duyệt, tôi khuyên bạn nên sử dụng PokeIn WebSocket và Thư viện Ajax đảo ngược. Bắt đầu từ phiên bản 2.0, nó có máy chủ WebSocket tích hợp sẵn. Thông tin chi tiết có tại đây


Quảng cáo đề cập trước đó, Signalr có dự phòng vận chuyển, vì vậy nếu không có hỗ trợ của cổng web (trên máy chủ hoặc máy khách) nó rơi xuống loại phương tiện giao thông khác và như vậy ..
psulek

2
Đó không phải là SignalR cần Windows Server 2012, vì vậy nó không phải là lỗi của nó.
Alisson
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.