一个回车引发的几夜不眠

角色

    asmack-android-8-4.0.0.jar
    Openfire 3.9.1
    PHP 5.3.28 (cli) (built: Dec 15 2013 17:43:05)
    android 4.1

剧情

    某日,某同学需要在android上开发一个IM聊天室应用,采用了 asmack←XMPP协议→openfire 的组合。加入聊天室需要一个昵称和头像才有资格进去,为了达到目的,该同学把昵称和头像组合起来作为一个身份进入聊天室,聊天室内展示该身份时,再将昵称和头像分开。举例来说,“XX:OO"这个身份是由昵称“XX”和头像“OO”组成的。

    由于该同学脑筋异常,昵称XX非要从服务器获取不可,于是他特意用PHP写了个网页,专门用来返回昵称。他的PHP是这样写的:

<?php
    echo 'XX';
?>

    于是当他访问这个网页的时候,返回了

XX
                                                                                 ·

    再于是,经过昼夜编码,android可以登陆聊天室了。但是很奇怪的,每次加入聊天室都会得到一个NoResponse的异常。这位同学检查了各种可能,甚至包括XMPP是否运行在安全模式下。

    最终在排查报文时,偶然发现打印的日志是这样的

D/SMACK(6274): SENT (0): <presence id='jRtGU-4' to='[email protected]/OO
D/SMACK(6274): :XX'><x xmlns="http://jabber.org/protocol/muc"></x></presence>
D/SMACK(6481): RCV (0): <presence id="jRtGU-4" to="d1c6b13a@imhere/d1c6b13a" from="[email protected]/OO :XX"><x xmlns="http://jabber.org/protocol/muc#user"><item jid="d1c6b13a@imhere/d1c6b13a" affiliation="none" role="participant"/></x></presence>

    几秒后又是一个异常:

一个回车引发的几夜不眠

    就是说,服务器把


XX
:OO

    变成了

OO :XX


    但是居然还能正常发送和接收聊天室的消息。

    该同学把获取OO的服务器代码改成了


<?php
    echo 'XX';
    exit();
?>

    额..终于可以消灭NoResponse异常了..


剧终

    很囧是不是,我也这样觉得...哈哈

你可能感兴趣的:(一个回车引发的几夜不眠)