问题描述:
GPT只能在队长的机器上使用,队员使用内网IP登录队长的苍穹环境之后GPT返回不出消息来,看运行日志是成功调用了服务的,就是返回不到队员的苍穹上,就是发消息之后一直等待,无反应。
队长电脑有反应:
队员电脑无反应:
从图中看出,用内网IP访问的时候消息就加载不出来,用127.0.0.1的话才可以。
原因分析:
我们知道,在聊天的时候,这种情况一般采用的是TCP长连接的形式进行信息交互的。在浏览器中,我们可以查看WebSocket来了解在这一次的交互中到底发生了什么。
使用127.0.0.1的时候,能够正常访问gpt的控制台提示,此时的websocket是成功的。
但是当用内网IP登陆的时候,就不能正常进行websocket了
这是为什么呢?我们看一下WebSocket的具体信息。
我们可以看到Origin和Host是不一样的,即在WebSocket的过程中,其实是浏览器Origin到Host的Socket连接。因此在这种连接当中,就可能会出现跨域问题。所以当Host和Origin都设置为一样的IP时,连接才可以正常工作,因为这两个值匹配,满足了同源策略的要求。
问题解决
所以归根结底还是IP的问题。所以此时如果以重复替换域名的方式(即先用内网IP访问,访问之后自动跳转到127.0.0.1,然后又重复利用内网IP替换127.0.0.1)可能就不太行得通了。
所以这里我们可以分为两种苍穹服务启动模式来换IP,一种是开发者工具内启动,一种是IDEA内启动
如果利用开发者工具启动,可以跳转到:https://developer.kingdee.com/article/309126299510156032?productLineId=29&lang=zh-CN
以此来修改127.0.0.1来修改环境的IP
但是对于开发者大赛来说这种无疑是比较麻烦的,并且内网IP地址也在DHCP的情况下不断变动,所以我更建议大家在IDEA内修改IP并启动苍穹服务,而且在开发过程中我们还需要写插件等操作,无疑IDEA是非常重要的启动方式。
在IDEA中修改IP就比较简单了,直接替换掉CosmicLauncher.java和DebugApplication.java中的所有127.0.0.1就行了。当然由于IP地址在变动,一个一个修改也不方便,所以我们可以稍微修改下这两个文件中的代码,比如加一个全局变量,然后替换所有IP,再在启动项中赋值即可,比如:
public static String IP_ADDRESS; public static void setIP(String IP_ADDRESS) { DebugApplication.IP_ADDRESS = IP_ADDRESS; }
然后将所有有关IP地址的字符串替换成IP_ADDRESS即可,就如:
解决后我们就可以看到我们用内网IP访问之后,GPT就能成功回答了。