Git Product home page Git Product logo

Comments (4)

lemunozm avatar lemunozm commented on August 10, 2024 1

Thanks for responding with the solution 😃. Helpful for other users.

Anyway, I will try to improve message-io documentation to avoid this issue for the next person.

Regards

from message-io.

lemunozm avatar lemunozm commented on August 10, 2024

Hi @lokimckay,

First of all, thanks for your great explanation and reproduction steps 😃

WebSocket can support two kinds of message data formats: binary and text. Since message-io handle the input/output data as binary, the WS adaptor used is only implemented for binary mode. The extension you're using sends data to the server in text mode, and message-io drops the message.

I tested allowing message-io to understand the Text message, but because the WS adaptor always sends in binary mode, the extension, in this case, is who drops the binary message.

I hope your real case can support binary messages. Adding the text format support to message-io could be possible, but there is some decision points as "how to send a WS message specifying the format in a generic send() of the message-io interface" that must be evaluated before.

from message-io.

lokimckay avatar lokimckay commented on August 10, 2024

Thanks for the great project and explanation @lemunozm 😄

Do you know if it is possible for the browser implementation of Websocket to send as binary data? (as you say is required?) I find it hard to determine this from their docs

I created a minimal reproduction repo using a simple index.html file and Javascript instead of the third-party chrome extension - but I still see the same behaviour that I reported in my issue

Can you tell me if I am still trying to send the messages as text?

https://github.com/lokimckay-references/message-io-122

from message-io.

lokimckay avatar lokimckay commented on August 10, 2024

Woops, answered my own question 🤦
I didn't understand that the javascript was literally sending a string to the Rust websocket, and it needed to instead send a byte array (like you said)

Fix: lokimckay-references/message-io-122@10897f7
Copy+paste of the diff:

 function onConnectButtonClick() {
+  ws.addEventListener("message", onMessageReceived);
 }

 function onSendMessageButtonClick() {
   console.log('Sending "Hello there!"');
-  ws.send("Hello there!");
+  ws.send(stringToByteArray("Hello there!"));
+}

+function stringToByteArray(str) {
+  const bytes = new Uint8Array(str.length);
+  for (let i = 0; i < str.length; i++) {
+    bytes[i] = str.charCodeAt(i);
+  }
+  return bytes;
+}

+async function onMessageReceived(event) {
+  const message = await event.data.text();
+  console.log("Received:", message);
+}

Behaves as expected 🎉

Will close the issue now, thanks for your help 😄

from message-io.

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.