【问题标题】:Ratchet socket from Android and IOS clients来自 Android 和 IOS 客户端的棘轮套接字
【发布时间】:2015-10-12 12:44:03
【问题描述】:

我已经使用 Ratchet 编写了套接字 PHP 代码。这是简单的代码,当我从网络发送和获取消息时可以使用 - javascript:

    use Ratchet\MessageComponentInterface;

    class Chat implements MessageComponentInterface{
        protected $clients;

        public function __construct(){
            $this->clients = new SplObjectStorage();
        }

        function onOpen(\Ratchet\ConnectionInterface $conn)
        {
            echo "Did Open\n";
            $this->clients->attach($conn);
        }


        function onClose(\Ratchet\ConnectionInterface $conn)
        {
            echo "Did Close\n";
            $this->clients->detach($conn);
        }


        function onError(\Ratchet\ConnectionInterface $conn, \Exception $e)
        {
            echo "The following error occured: ". $e->getMessage();
        }


        function onMessage(\Ratchet\ConnectionInterface $from, $msg)
        {
            $msgObj = json_decode($msg);
            echo $msgObj->msg;
            foreach($this->clients as $client){
                if($client !== $from){
                    $client->send($msg);
                }
            }
        } 
}

问题是当我使用 java 客户端时 - 从 Android 应用程序。我使用来自 Activity 的线程。它没有例外,没有错误。 client.isConnected() 是真的。但是没有不调用任何服务器代码 - onOpen 方法、onMessage 等。我怎样才能解决这个问题。 IOS的情况几乎相同。客户端连接到服务器,但没有调用任何 Ratchet 方法。它们仅从 javascript 调用。 Java 代码:

new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    client = new Socket("XX.XX.XX.XX", 2000);

                    printWriter = new PrintWriter(client.getOutputStream());
                    printWriter.write("Android Message");
                    printWriter.flush();
                    printWriter.close();
                    client.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }).start();

【问题讨论】:

    标签: javascript android ios sockets ratchet


    【解决方案1】:

    尝试使用
    安卓:https://github.com/TooTallNate/Java-WebSocket
    iOS:https://github.com/square/SocketRocket
    因为 Ratchet 是 WebSocket。你的主机名应该从 ws://

    【讨论】:

    • 谢谢,java lib 帮助了。我想知道,本机 java Socket 类有什么问题。为什么我应该使用来自 github 的第三方库和基本套接字?也许这个库(由你提供,Java)使用了一些为此需要的协议,不知道。如果 iOS Rocket Socket 库也能正常工作,我会将解决方案提供给我的松鼠 iOS 开发人员并在今天提供反馈。还是谢谢你先生!
    • 从内存来看,内置的 Java Socket 类不是为 websocket 设计的,而是直接二进制连接到服务器端口。因此它不符合 WebSocket 握手规范,因此不会触发 onopen 等。
    • @MarshallOfSound 现在我看到了问题,我花了一天时间使用 Java Sokets。现在它可以与 Web Socket 库一起使用。谢谢
    • @MishaAkopov,您能告诉我,您为此使用了什么网络套接字库吗?
    • 对于客户@MishaAkopov?
    猜你喜欢
    • 1970-01-01
    • 2011-06-30
    • 2012-08-05
    • 2012-03-29
    • 2017-11-10
    • 2015-07-28
    • 2011-07-31
    • 2014-06-04
    • 1970-01-01
    相关资源
    最近更新 更多