RubbyMotion에서 WebSocket 사용

2617 단어 RubyMotioniOS
서버와의 협업 앱 업데이트의 최신 상태를 얻기 위해 백스테이지에서 얻으면 부담이 커지고 멋있지 않아 서버 쪽에서 밀어낼 수 있으면 편리합니다...그래서 나는 RubbyMotion에서부터 웹소켓을 사용하기 시작했다.

서버 측(nodejs)


이번에는 서버를 간단하게 만들기 위해 nodejs의 ws 모듈을 사용합니다.
ws: a node.js websocket implementation
s
nodejs가 있으면 npm로 간단하게 설치합니다.
npm install -g ws
설치 후 wscat이라는 유틸리티를 설치합니다. 이 유틸리티를 사용하면 웹소켓의 수발 테스트를 간단하게 할 수 있습니다.포트 8080에서 서버 모드로 수신합니다.
wscat -l 8080
이렇게 간단한 송수신 서버가 완성됐습니다.

클라이언트(iOS)


Socket Rocket이라는 프레임워크를 사용합니다.코코프즈에서는 설치가 간단하기 때문이다.자~ 의자~ 그래.
SocketRocket Objective-C WebSocket Client
# motion-cocoapdsインストール時
  app.pods do
    pod 'SocketRocket'
  end
Rake pod:install
코드는 SRWebSocket 및 delegate를 생성합니다.
주: 실제로는 Storyborad를 통해 UI를 만들고 IB를 통해 연결하며 myMessage는 UItextField와 연결합니다.또한 ProMotion을 사용하기 때문에load에 초기화 코드가 쓰여 있습니다.
class MainScreen < PM::Screen
  extend IB

  outlet :myMessage, UITextField

  def on_load #ProMotion初期化
    url = NSURL.URLWithString("ws://127.0.0.1:8080")
    @socket = SRWebSocket.alloc.initWithURLRequest(NSURLRequest.requestWithURL(url))
    @socket.delegate = self
    @socket.open
  end

  def sendMessage #メッセージ送信
    p "Send: #{myMessage.text}"
    @socket.send(myMessage.text)
    myMessage.text = ""
  end

  def webSocketDidOpen(webSocket)
    p "Socket Open!"
  end

  def webSocket(webSocket, didReceiveMessage:message)
    p "Receive: #{message.description}" 
  end

  def webSocket(webSocket, didFailWithError:error)
    p "Error : #{error.description}"
  end

  def webSocket(webSocket, didCloseWithCode:code,reason:reason)
    p "Close"
  end

end

동작 테스트


nodejs에서 제작한 서버 옆에 텍스트를 입력하면 고객이 받습니다.또한 문자열을 보내면 서버에 보냅니다.잘 진행되지 않으면 포트와 IP를 기다리십시오.
이 결정 프로토콜을 잘 사용하면 서버에서 추측되는 실시간 동작에 대응할 수 있을 것 같습니다.잘했어.

확장성


서버 연결 상태 오류 표시 등 Notice View를 추가하면 멋있을 거라고 스스로 필기했다.
notice = WBErrorNoticeView.errorNoticeInView(self.view,
  title:"Socket Error", message:"Check your network connection.")
notice.show
NoticeView A TweetBot-like notice component for iOS.

좋은 웹페이지 즐겨찾기