java_웹소켓안드로이드 메시지 전송 실현
회사의 프로젝트는 생방송과 관련된 것이기 때문에 자연스럽게 생방송과 채팅의 기능을 가지게 된다. 많은 생방송과 마찬가지로 우리는 환신을 선택했다. 환신의 접속과 사용은 상대적으로 편리하다. 그러나 생방송 인원이 늘어나면서 심각한 문제가 생겼다. 우리는 이차원이라고 부른다. 생방송에 들어가면 다른 사람의 상호작용을 볼 수 없고 혼자 노는 것도 즐겁지 않다.남들도 안 보이는데..
문제의 심각성을 고려하여 우리는 웹 소켓을 바꾸기로 결정했다.
웹소켓 소개
생방송 중의 실시간 통신이기 때문에 메시지의 발송이 매우 빈번할 것이다. 만약에 http 요청을 하면 모든 메시지를 보내면 새로운 링크를 만들고 발송할 것이다. 이것은 치명적인 것이다. 웹 소켓은 새로운 프로토콜로 긴 연결을 한 번에 연결한 후에 여러 번 메시지를 보낼 수 있고 생방송을 종료할 때 연결을 끊으면 된다.구체적으로 이 글을 볼 수 있는데 웹소켓은 어떤 원리입니까?왜 지속적인 연결을 실현할 수 있습니까?
프로젝트 사용
1. 의존 추가, 채택한javawebSocket
compile “org.java-websocket:Java-WebSocket:1.3.0”
2. 클라이언트가 자바를 사용하여 웹소켓 client 구현
public class XZMsgClient extends WebSocketClient{
public XZMsgClient(URI serverURI ) {
super( serverURI, new Draft_17());
}
public void sendMsg(String text) throws NotYetConnectedException {
//write a message
send(text);
}
@Override
public void onOpen( ServerHandshake handshakedata ) {
System.out.println( "opened connection" );
// if you plan to refuse connection based on ip or httpfields overload: onWebsocketHandshakeReceivedAsClient
}
@Override
public void onMessage( String message ) {
message.matches("/^id: (.*)
(content-type: (.*)
)?
/m");
}
/* @Override
public void onFragment( Framedata fragment ) {
System.out.println( "received fragment: " + new String( fragment.getPayloadData().array() ) );
}*/
@Override
public void onClose( int code, String reason, boolean remote ) {
// The codecodes are documented in class org.java_websocket.framing.CloseFrame
System.out.println( "Connection closed by " + ( remote ? "remote peer" : "us" ) );
}
@Override
public void onError( Exception ex ) {
ex.printStackTrace();
// if the error is fatal then onClose will be called additionally
}
}
3. 웹SocketClient 인스턴스를 만들고 메서드를 다시 작성합니다.
/**
* websocket
*/
private void createWebSocket() {
xzMsgClient = new XZMsgClient(uri) {
@Override
public void onOpen(ServerHandshake handshakedata) {
super.onOpen(handshakedata);
Log.i("Websocket", "Opened");
if (mUser != null) {
String messageContent = " " + mUser.usernickname + " ";
String msg = getJsonMessage(messageContent, Enter_OR_LEAVE, "", "1");
xzClientSendMessage(msg);
}
}
@Override
public void onMessage(String message) {
super.onMessage(message);
Log.e(TAG, "onMessage: " + message);
mHandler.post(new Runnable() {
@Override
public void run() {
//
dealMessage(message);
}
});
}
@Override
public void onClose(int code, String reason, boolean remote) {
super.onClose(code, reason, remote);
Log.i("Websocket", "Closed " + reason);
}
@Override
public void onError(Exception ex) {
super.onError(ex);
Log.i("Websocket", "Error " + ex.getMessage());
}
};
xzMsgClient.connect();
}
4. 간단한 설명
xzMsgClient.getReadyState().equals(WebSocket.READYSTATE.OPEN)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.