Coder Social home page Coder Social logo

Implement SocketPlugin about squeakjs HOT 6 OPEN

codefrau avatar codefrau commented on May 23, 2024
Implement SocketPlugin

from squeakjs.

Comments (6)

ccrraaiigg avatar ccrraaiigg commented on May 23, 2024

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.

from squeakjs.

codefrau avatar codefrau commented on May 23, 2024

As of 94c003a 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?

from squeakjs.

ccrraaiigg avatar ccrraaiigg commented on May 23, 2024

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.

from squeakjs.

ErikOnBike avatar ErikOnBike commented on May 23, 2024

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:

  • Within original SocketPlugin the primitive methods sometimes do 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.)
  • What is the reason for using both 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.
  • I have also added name resolving in the SocketPlugin (using DNS over HTTPS). Would it be okay to receive this in a single PR or do you prefer separate PRs?

@ccrraaiigg maybe this is useful for Caffeine as well.

from squeakjs.

codefrau avatar codefrau commented on May 23, 2024

Awesome! I'm really busy atm, so can't review in detail, sorry. But as to your questions:

  • Yes, we should use 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
  • single PR would be fine

from squeakjs.

ErikOnBike avatar ErikOnBike commented on May 23, 2024

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 ;-).

from squeakjs.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.