2012-02-07 27 views
11

Tôi muốn chạy máy chủ WebSocket khỏi vai trò công nhân trong Azure.Chạy Fleck (hoặc bất kỳ) Máy chủ Websocket trên Windows Azure

Tính năng này hoạt động tốt trên trình mô phỏng, nhưng có một cửa sổ tường lửa nhắc nhở lần đầu tiên máy chủ socket chạy.

Tôi tự hỏi nếu có ai biết cách khắc phục sự cố kết nối liên quan đến ổ cắm trên Azure.

My thực hiện socket server: OnStart

var server = new WebSocketServer("ws://theappname.cloudapp.net:8080/"); 

server.Start(socket => 
{ 
    socket.OnOpen =() => 
    { 
     Trace.WriteLine("Connected to " + socket.ConnectionInfo.ClientIpAddress,"Information"); 
     _sockets.Add(socket); 
    }; 
}); 
.... etc 

Việc thực hiện khách hàng:

var socket = new WebSocket("ws://theappname.cloudapp.net:8080"); 

socket.onopen = function() { 
    status.html("Connection Opened"); 
}; 
socket.onclose = function() { 
    status.html("Connection Closed"); 
} 

Những thay đổi trạng thái để closed một vài giây sau khi tải trang.


endpoint của tôi cho vai trò công nhân dưới đây:

WebSocket Input http 8080 <Not Set>


bây giờ tôi đã cố gắng liên kết với địa chỉ IP nội bộ bằng cách sử dụng sau đây:

RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["WebSocket"].IPEndpoint.ToString();


GIẢI PHÁP

Vì lợi ích của bất kỳ ai khác phải đối mặt với điều này khi triển khai ổ cắm web trên Azure;

  1. Tường lửa của bạn có thể sẽ từ chối kết nối nếu không ở cổng 80 hoặc 8080 để tạo triển khai riêng cho nó.

  2. Điểm cuối phải được đặt thành TCP và không phải HTTP cho các quy tắc tường lửa chính xác được tạo. (Xem hình)

Endpoint Configuration

+2

Chỉ vì mục đích dùng thử, tại sao bạn không thay đổi Endpoit đầu vào của mình từ giao thức "http" sang "tcp". Và đặt cổng cục bộ thành 8080 (trong trường hợp của bạn là ). Ngoài ra, bạn phải ghi nhớ rằng Windows Azure Load Balancer sẽ giết bất kỳ kết nối nào không hoạt động trong hơn 60 giây. – astaykov

+0

@astaykov - Nhận xét của bạn đã dẫn đến giải pháp, vui lòng đăng bài bên dưới để tôi có thể + tin tưởng bạn. Cảm ơn. – f0x

+0

@astaykov Bạn có thực hiện đầy đủ?Tôi đang cố gắng để tôi làm việc và chưa bao giờ làm điều này trước đây. – Yecats

Trả lời

8

Chỉ vì mục đích dùng thử, tại sao bạn không thay đổi Endpoit đầu vào của mình từ giao thức "http" thành "tcp". Và rõ ràng đặt cổng cục bộ thành 8080 (trong trường hợp của bạn là). Ngoài ra bạn phải ghi nhớ rằng Windows Azure Load Balancer sẽ giết bất kỳ kết nối nào không hoạt động trong hơn 60 giây, vì vậy bạn có thể muốn thực hiện một số loại giải pháp "ping" để giữ kết nối mở.

+0

Cảm ơn các nhận xét bổ sung về việc giữ kết nối mở, đang cân nhắc điều gì đó tương tự. – f0x

+0

Tôi rất vui vì tôi có thể giúp! – astaykov

+0

Không phải là kết nối giữ mở gửi PING bởi giao thức chính nó? –

0

Bạn có thể muốn xem xét video giới thiệu này mà Steve Marx (@smarx) đặt cùng trên how to run node.js on Windows Azure.

+0

Cảm ơn, tôi đã làm việc rộng rãi với node.js và socket.io; tiếc là đây không phải là bối cảnh tôi được trình bày. – f0x

Các vấn đề liên quan