我正在尝试构建的应用程序如下.
Java客户端<---> TCL服务器(比如Server.tcl)<--->其他一些TCL脚本(比如ABC.tcl)
我正在使用Socket编程来进行Java Client和TCL服务器之间的通信.现在我的要求是在运行时从Server.tcl调用ABC.tcl.执行时ABC.tcl将通过server.tcl向Java客户端发送一些问题.坐在Java客户端的用户应该将回复发送给问题,答案应该回到ABC.tcl.现在,当回复回来时,ABC.tcl应该等待.但我不能在ABC.tcl中有一个繁忙的等待循环,因为控件不会来到Server.tcl,因为它是曾经与Java客户端通信的人.
ABC.tcl将使用Server.tcl中定义的一些过程.如果需要,可以更改设计.
我在考虑在TCL中使用Threads.我打算将ABC.tcl作为一个单独的线程调用,然后让它等待回复.这样Server.tcl可以与ABC.tcl分开执行.
通缉意见是他们有更好的方法吗?如果Threads是唯一更好的方法,我可能遇到的挑战是什么,我该如何处理它们?
编辑:
我没有在Server.tcl和ABC.tcl之间使用套接字通信.在Server.tcl中,我正在寻找ABC.tcl,当一些通信请求来自Java客户端时,我正在调用ABC.tcl的一个过程(比如proc someProc {}).现在在someProc过程中,完成了一些处理,并通过Server.tcl将问题(例如"你想继续吗?")发送回Java客户端.现在在ABC.tcl我希望程序someProc等到用户输入内容.当用户输入答案(是/否)时,我希望程序从等待用户输入的位置继续执行.
现在发生的事情是我无法按要求正确设置等待条件.我尝试使用一个标志变量,当用户输入答案时将更新该标志变量,并尝试根据标志变量在someProc中保持繁忙的等待循环.但是当用户输入到来时,它不会从等待循环开始继续执行.它像普通请求一样启动,进入Server.tcl中注册的过程来处理传入的数据.
我有"vwait事件"调用,并且我在Server.tcl中有"fileevent $ sock readable [list svcHandler $ sock]".
我无法得到,我怎样才能在ABC.tcl中的someProc过程中等待,并根据用户输入从相同的忙等待中恢复处理.
source "<path>/serverTest.tcl"
set svcPort [lindex $argv 0]
set filePath <path where all related files are kept>
set replyReady 0
set packet ""
proc writeToFile {fileName data mode} {
set fileId [open $fileName $mode]
puts -nonewline $fileId $data
close $fileId
}
proc writeJavaUTF {sock msg} {
set date [exec date]
set msg $date$msg
set data [encoding convertto …Run Code Online (Sandbox Code Playgroud)