2014-06-18 2 views
0

내 앱에는 두 가지 종류의 사용자가 있습니다. A와 B 사용자를 예로 들어 보겠습니다. 나는 A와 B 사이에 일대 다 관계가있는 데이터베이스를 가지고 있으므로 A는 복수의 B와 B를 가질 수있다.소켓 기반 앱의 특정 사용자간에 데이터 전송

데이터를 A에서 B로, B에서 B로 보내야한다. A.

이 튜토리얼에서는 Raywenderlich의 소켓 기반 앱 및 서버 튜토리얼 http://www.raywenderlich.com/3932/을 따르고 있습니다.이 튜토리얼을 통해 사용자는 서버를 연결하고 다른 모든 사용자 (대화방)에게 데이터를 보낼 수 있습니다. iam : username

자습서에 표시된 것처럼 연결 한 사용자 대신 관계의 사용자에게만 특정 데이터를 보낼 수 있습니까?

from twisted.internet.protocol import Protocol, Factory 
from twisted.internet import reactor 


    class IphoneChat(Protocol): 
     def connectionMade(self): 
      #self.transport.write("""connected""") 
      self.factory.clients.append(self) 
      print "clients are ", self.factory.clients 

     def connectionLost(self, reason): 
      self.factory.clients.remove(self) 

     def dataReceived(self, data): 
      #print "data is ", data 
      a = data.split(':') 
      if len(a) > 1: 
       command = a[0] 
       content = a[1] 

       msg = "" 
       if command == "iam": 
        self.name = content 
        msg = self.name + " has joined" 

       elif command == "msg": 
        msg = self.name + ": " + content 

       print msg 

       for c in self.factory.clients: 
        c.message(msg) 

     def message(self, message): 
      self.transport.write(message + '\n') 


    factory = Factory() 
    factory.protocol = IphoneChat 
    factory.clients = [] 

    reactor.listenTCP(80, factory) 
    print "Iphone Chat server started" 
    reactor.run() 

답변

0

내가 코드를 참조하십시오 :

for c in self.factory.clients: 
    c.message(msg) 

당신은 대상을 포함하여 메시지 객체를 정의한다을

튜토리얼은 파이썬과 트위스트를 사용하여 서버를 만들고, 여기에 사용되는 코드입니다. 그런 다음이 서버 코드에서 메시지를 올바른 메시지로만 보냅니다.

+0

좋은 접근 방법일까요? 그것은 일을 할 것이지만, 나는 그것을 위해 연결된 모든 클라이언트에 도달해야 할 것이다. 연결된 모든 사용자를 검색하지 않고 특정 사용자에게 직접 데이터를 보내려면 어떤 종류의 P2P 응용 프로그램이 있습니까? – douglasd3

0

이 코드는 P2P 방식이 아닙니다. 이 서버는 사용자가 연결하는 서버입니다. 그것은 채팅 서버.

p2P 접근 방식의 경우이 서버 스크립트의 코드를 사용자 정의하여 iPhone이 파트너를 찾을 수있게 할 수 있습니다. 그런 다음 그와 직접 대화하십시오.

그래서,이 솔루션은 다음과 같습니다 - 클라이언트가 서로 통신 할 때마다,이 클라이언트가 연결되어 있는지 물어 서버에 접속하거나하지 않습니다 - 당신은 서버 에 연결된 클라이언트에 대한 추적이 서버 스크립트를 유지 , 그리고 그와 통신하기 위해 필요한 정보 (IP, 포트)는 무엇입니까? - 서버 응답이 정상이면 해당 클라이언트에 직접 소켓을 만듭니다.