Hi there, My code's intended to open a websocket connection to the echo service, wait 400ms to ensure that the connection is really established and send a textual message, which should be echoed back by the echo service.
The last part will be handling/parsing that message (i.e. TXT or JSON message, which was echoed in that channel). Thus, every time a message comes through the channel a callback will be in charge to parse that message and store its content. However, when I run the first version of the code, and it returns an error related to: Error: can't set "formMap": variable is array /usr/local/src/ns-4.9.17/tcl8.6.8/library/http/http.tcl: return [string map $formMap $string] /usr/local/src/tcl8.6.9/library/http/http.tcl: variable formMap [array get map] The error is related to core packages, and I believe it happens to fail because that source is some sort of an old code. Thus, it’s not a good idea to fork it at all. How would refactor a "background websocket connection", using the new implementation available at: https://bitbucket.org/naviserver/websocket/src/master/ <https://bitbucket.org/naviserver/websocket/src/master/> ? Here it’s the code package require websocket ::websocket::loglevel debug proc handler { sock type msg } { switch -glob -nocase -- $type { co* { ns_log Notice "Connected on $sock" puts "Connected on $sock" } te* { ns_log Notice "RECEIVED $msg" puts "RECEIVED: $msg" } cl* - dis* { } } } proc test { sock } { puts "[::websocket::conninfo $sock type] from [::websocket::conninfo $sock sockname] to [::websocket::conninfo $sock peername]" ::websocket::send $sock text "Testing, testing..." } set sock [::websocket::open wss://javascript.info/article/websocket/demo/hello handler] ns_log Notice "SOCKET \n $socket" after 400 test $sock vwait forever Documentation Reference: https://core.tcl-lang.org/tcllib/doc/tcllib-1-17/embedded/www/tcllib/files/modules/websocket/websocket.html#1 <https://core.tcl-lang.org/tcllib/doc/tcllib-1-17/embedded/www/tcllib/files/modules/websocket/websocket.html#1> Best wishes, I [11/Jul/2020:20:39:38][471.7efbf37fe700][-conn:iurix:0:91-] Error: can't set "formMap": variable is array while executing "variable formMap [array get map]" (procedure "init" line 15) invoked from within "init" (in namespace eval "::http" script line 83) invoked from within "namespace eval http { # Allow resourcing to not clobber existing data variable http if {![info exists http]} { array set http { -ac..." (file "/usr/local/ns/lib/tcl8/8.6/http-2.9.0.tm" line 16) invoked from within "source -encoding utf-8 /usr/local/ns/lib/tcl8/8.6/http-2.9.0.tm" ("package ifneeded http 2.9.0" script) invoked from within "package require http 2.7" (file "/usr/local/ns/lib/tcllib1.19/websocket/websocket.tcl" line 20) invoked from within "source /usr/local/ns/lib/tcllib1.19/websocket/websocket.tcl" ("package ifneeded websocket 1.4.1" script) invoked from within "package require websocket" ("uplevel" body line 3) invoked from within "uplevel { package require websocket ::websocket::loglevel debug proc handler { sock type msg } { switch -glob -nocase -- $type { co* { ..." (procedure "code::tcl::/var/www/iurix//packages/ix-websocket/www/ws2" line 2) invoked from within "code::tcl::$__adp_stub" ("uplevel" body line 12) invoked from within "uplevel { if { [file exists $__adp_stub.tcl] } { # ensure that data source preparation procedure exists and is up-to-date ..." (procedure "adp_prepare" line 2) invoked from within "adp_prepare" invoked from within "template::adp_parse $themed_template {}" (procedure "adp_parse_ad_conn_file" line 14) invoked from within "$handler" ("uplevel" body line 2) invoked from within "uplevel $code" invoked from within "ad_try { $handler } ad_script_abort val { # do nothing }" invoked from within "rp_serve_concrete_file [ad_conn file]" (procedure "::nsf::procs::rp_serve_abstract_file" line 60) invoked from within "rp_serve_abstract_file "$root/$extra_url"" ("uplevel" body line 2) invoked from within "uplevel $code" invoked from within "ad_try { rp_serve_abstract_file "$root/$extra_url" set ::tcl_url2file([ad_conn url]) [ad_conn file] se..." called from rp_handler GET http://iurix.com/websocket/ws2? referred by '' peer 192.199.241.135 user_id 0 Host: iurix.com X-Real-IP: 179.199.201.237 Connection: close Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 Accept-Language: pt-BR,pt;q=0.9,en-US;q=0.8,en;q=0.7 Cookie: _ga=GA1.2.1048850939.1594336017; _gid=GA1.2.432393726.1594336018; mycrawler=-6040px%3A2521px%3Aleft; ad_session_id="44640008%2c0%2c0%2c1594507600%20{834%201594508800%20914BAD40D8EF86359761E4528028EE55857B5F51}"
_______________________________________________ naviserver-devel mailing list naviserver-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/naviserver-devel