2011-01-05 31 views
10

Tôi muốn viết một máy chủ có thể chấp nhận nhiều máy khách trong python (xoắn). Tôi đã khá quen thuộc với lập trình socket với mô-đun socket python tiêu chuẩn nhưng ở đây có rắc rối .. Tôi nghĩ rằng xoắn thực sự khó khăn để có được thành và tôi đã đọc một số hướng dẫn về nó. Nhưng một điều mà tôi không thể thực sự tìm thấy là một máy chủ socket đơn giản chấp nhận nhiều kết nối .. Bất cứ ai có thể giúp đỡ? Nếu tôi bỏ lỡ một số thông tin có giá trị trực tuyến xin vui lòng cho tôi biết, vì tôi đang kéo tóc của tôi ra ..Máy chủ được xoắn cho nhiều máy khách

Bất kỳ giúp đỡ được nhiều đánh giá cao,

Andesay

+0

Cậu nhìn vào http://stackoverflow.com/questions/1365737/managing-multiple-twisted -client-connections –

+0

Andrew, tôi nghĩ câu hỏi đó khác với câu hỏi của Andesay. Tôi cảm thấy câu hỏi của Andesay ở mức độ cơ bản. Hãy sửa tôi nếu tôi sai. –

Trả lời

12

Này, bạn muốn chạy một máy chủ chấp nhận các kết nối khách hàng trên cổng 9000:

from twisted.internet import reactor, protocol 

PORT = 9000 

class MyServer(protocol.Protocol): 
    pass 

class MyServerFactory(protocol.Factory): 
    protocol = MyServer 

factory = MyServerFactory() 
reactor.listenTCP(PORT, factory) 
reactor.run() 

Và nếu bạn muốn kiểm tra kết nối đến máy chủ này, đây là mã cho một khách hàng (để khởi động trong một thiết bị đầu cuối khác nhau):

from twisted.internet import reactor, protocol 

HOST = 'localhost' 
PORT = 9000 

class MyClient(protocol.Protocol): 
    def connectionMade(self): 
     print "connected!" 

class MyClientFactory(protocol.ClientFactory): 
    protocol = MyClient 

factory = MyClientFactory() 
reactor.connectTCP(HOST, PORT, factory) 

reactor.run() 

bạn sẽ nhận thấy mã là rất giống nhau, chỉ chúng tôi sử dụng một nhà máy cho một máy chủ và một ClientFactory cho một khách hàng, và các máy chủ cần phải lắng nghe (listenTCP) trong khi khách hàng cần phải kết nối (connectTCP). Chúc may mắn!

+0

Tôi sẽ nói, mã máy chủ trong một thiết bị đầu cuối và mở nhiều thiết bị đầu cuối mới và cố gắng kết nối bằng cách sử dụng 'nc localhost 9000' hoặc' telnet localhost 9000'. Sử dụng khách hàng tiêu chuẩn đầu tiên sẽ giúp. –

+0

Cảm ơn ví dụ tuyệt vời này .. Tôi nghĩ rằng đây chỉ là những gì tôi cần .. Tôi có một câu hỏi mặc dù .. Trong ví dụ máy chủ dưới "lớp MyServer (protocol.Protocol)" bạn viết một tuyên bố vượt qua .. Tại sao không có gì trong lớp này? – Andesay

+0

Và tôi sẽ gửi và nhận dữ liệu như thế nào? – Andesay

7

Tôi nghĩ rằng, bạn đã không nhận được bản chất của xoắn . Nếu bạn tạo một máy chủ socket xoắn, nó là do kết nối mặc định có sẵn thông qua nhiều máy khách. Tôi sẽ đề xuất các hướng dẫn sau theo thứ tự và sau đó đọc tài liệu bị xoắn. Viết các đoạn nhỏ như được đưa ra trong các hướng dẫn này để hiểu những gì đang thực sự xảy ra.

  1. Dave Peticola's twisted tutorial
  2. Itamar Shtull-Trauring's twisted presentation
0

Twisted là một khuôn khổ tuyệt vời, nhưng điều này (thường xuyên) ngụ ý rằng cho điều dễ dàng có thể là một khá khó khăn ...

Dưới đây là một thực tế . Bạn cần phải viết một lớp mà thực hiện một Resource, một LineReceiver nếu bạn cần, và sau đó gắn nó vào lò phản ứng với:

reactor.connectTCP(<HOST>, <PORT>, istance_of_your_class) 
+1

Khi phản ánh, câu trả lời này không có ý nghĩa gì cả. Bạn đã liên kết 'tài nguyên' với 'ClientFactory' và tôi không thấy cách 'connectTCP' liên quan đến câu hỏi của người hỏi tại * all *; "chấp nhận nhiều khách hàng" giống như người hỏi đang viết một máy chủ * * chứ không phải máy khách. Các tài nguyên chỉ liên quan đến HTTP, một 'LineReceiver' phải làm gì với bất kỳ thứ gì và bạn đang nói về lớp nào? – Glyph

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