songtianyi / wechat-go

go version wechat web api and message framework for building wechat robot
MIT License
1.84k stars 343 forks source link

session exit, session down, sel 4% #16

Open laike9m opened 7 years ago

laike9m commented 7 years ago

在阿里云内新开一个 tmux session,半小时内一定会出现

session exit, session down, sel 4%

本地无法重现。

稍微看了下代码,这里 如果 sel 不是 0 或者 7 就直接报错退出。然而在 itchat 对应的逻辑是这么写的:

                i = sync_check(self)
                if i is None:
                    self.alive = False
                elif i == '0':
                    pass
                else:
                    msgList, contactList = self.get_msg()
                    if msgList:
                        msgList = produce_msg(self, msgList)
                        for msg in msgList:
                            self.msgList.put(msg)
                    if contactList:
                        chatroomList, otherList = [], []
                        for contact in contactList:
                            if '@@' in contact['UserName']:
                                chatroomList.append(contact)
                            else:
                                otherList.append(contact)
                        chatroomMsg = update_local_chatrooms(self, chatroomList)
                        chatroomMsg['User'] = self.loginInfo['User']
                        self.msgList.put(chatroomMsg)
                        update_local_friends(self, otherList)
                retryCount = 0

sync_check 返回的 i 就是 wechat-go 里的 sel,并没有非 0 或 7 就退出的逻辑。

我并不了解微信里这些数字的含义,您可否再看一下这里是否一定有必要退出呢?谢谢。

songtianyi commented 7 years ago

@laike9m 你用了自动重登的逻辑了不,在 travis/linux/terminal_bot里有示例。 synccheck 出现这种sel值的时候 如果不处理,会一直出现,收不到消息。

laike9m commented 7 years ago

看到了,今天再试试

songtianyi commented 7 years ago

@laike9m 这个问题解决了不?

laike9m commented 7 years ago

还在测试。明天告诉你结果

laike9m commented 7 years ago

挂了一晚上,似乎正常

laike9m commented 7 years ago

看了一下,从昨天晚上挂到今天上午10点之后出错,出错部分的log如下:

2017/07/13 10:02:28 ^[[1;34m[I] webpush.web.wechat.com 0 0^[[0m
2017/07/13 10:02:54 ^[[1;34m[I] webpush.web.wechat.com 0 0^[[0m
2017/07/13 10:02:54 ^[[1;34m[I] webpush.web.wechat.com 1102 0^[[0m
2017/07/13 10:02:54 ^[[1;31m[E] re-login error, unhandled exception ret 1102^[[0m
2017/07/13 10:02:57 ^[[1;34m[I] trying re-login with cache^[[0m
2017/07/13 10:02:57 ^[[1;34m[I] &{19824161 @972b6ca63b93aeb73a30cf15c5a55484af3e51fcb767d82e91f69c70ec78eb98 David /cgi-bin/mmwebwx-bin/webwxgeticon?seq=432787763&username=@972b6ca63b93aeb73a30cf15c5a55484af3e51fcb767d82e91f69c70ec78eb98&skey=@crypt_a0547333_2b22366cb459bf28ae34a1b1886ead99 0 0 []      0 0 1 <span class="emoji emoji1f60a"></span> 0 0 0    0 0 0 1 0 0  0   0 0}^[[0m
2017/07/13 10:02:58 ^[[1;34m[I] entering synccheck loop^[[0m
2017/07/13 10:02:58 ^[[1;34m[I] webpush.web.wechat.com 1102 0^[[0m
2017/07/13 10:02:58 ^[[1;31m[E] re-login error, unhandled exception ret 1102^[[0m
2017/07/13 10:03:02 ^[[1;34m[I] QZY0MCzytg==^
laike9m commented 7 years ago

我大概知道问题在哪了,如果 useCache = true 就会沿用之前的线路,但线路有可能变化,所以应该设置成 false

songtianyi commented 7 years ago

@laike9m 不完全对,当线路没变的时候没问题。设置为false就不能利用cache登陆了,可以把线路记录下来,沿用之前的线路。 目前登陆已经出了专门用于重登的api,我还没加上去。

laike9m commented 7 years ago

不利用 cache 登陆会有什么问题么?毕竟第一次总是没有 cache 的

songtianyi commented 7 years ago

不用cache就要扫码