Open codefrau opened 9 years ago
Yes, a proxy server is needed. I'm writing WebSockets support for Squeak on all host platforms, including SqueakJS. It supports transparent operation of the Flow networking API.
As of 94c003a3fbf28aba91f20631fe75d843ee169960 we have a client-side only SocketPlugin using a public CORS proxy. It only supports http/https requests. So I think a WebSocket-based client+server solution is still needed, to enable non-http connections. Do we want to ship two different SocketPlugins? Or merge them into one?
I think we should merge them into one. The networking support I mentioned is now part of another project that includes remote messaging, screen-sharing, and a new way of installing native Squeak. While those special cases have priority over transparent generalized socket use (similar to the image-updating case), I estimate having something separable in August.
I have updated the SocketPlugin with WebSocket support. It is working in my current setup (on NodeJS and within browser) with Cuis. Some more testing is needed with different images as well as some extra guards need to be build in. I do have a few questions though:
popthenPush(argCount, ...)
and sometimes popthenPush
with some literal number. Shouldn't this always be argCount
? If not, what is the reason? See for example primitiveSocketSendDataBufCount
where argCount === 4
but popthenPush(1, ...)
is performed. (This also happens in a few other plugins.)fetch(...)
and XMLHttpRequest
? It does not seem to be for supporting old browsers, since fetch
seems similar in support as TextDecoder
and TextEncoder
which are used without a replacement.@ccrraaiigg maybe this is useful for Caffeine as well.
Awesome! I'm really busy atm, so can't review in detail, sorry. But as to your questions:
argCount
consistently. If the primitive checks that argCount
is the expected value then that is unnecessary, but it also doesn't cost much.fetch
vs XMLHttpRequest
is just historical I think. We started out XMLHttpRequest
but then fetch
had some advantages, I think regarding CORS. It would be fine to get rid of XMLHttpRequest
I think this issue can be closed. If getting rid of XMLHttpRequest is relevant, maybe we should create separate issue for it. (Would clean things up in SocketPlugin ;-).
So far, there is no networking support (except via the JSBridge). It would be awesome if socket connections could be opened, but it's not quite clear how this could work. WebSockets are a possibility but are hampered by the browser's security restriction. Possibly a proxy server is needed.