Хочу наладить обмен информации сервер-клиент(Node.js<->Unity3D) В случае с серверной частью беру такой скрипт.
var http = require('http');
var url = require('url');
var querystring = require('querystring');
var static = require('node-static');
var file = new static.Server('.');
function accept(req, res) {
console.log(req);
// через 1.5 секунды ответить сообщением
setTimeout(function() {
res.end('текст ответа ' + new Date() + req.url);
}, 1500);
}
if (!module.parent) {
http.createServer(accept).listen(8080);
} else {
exports.accept = accept;
}
console.log("Starting");
Данный скрипт работает вполне себе хорошо. При заходе с браузера на него (http://127.0.0.1:8080/) выдает большой обьем информации в console.log вида
IncomingMessage {
_readableState:
ReadableState {
objectMode: false,
highWaterMark: 16384,
buffer: BufferList { head: null, tail: null, length: 0 },
length: 0,
pipes: null,
pipesCount: 0,
flowing: null,
ended: false,
endEmitted: false,
reading: false,
sync: true,
И так далее. Но когда я пытаюсь просто послать запрос с Unity 3D
private void Update()
{
if (Input.GetKeyDown(KeyCode.P))
{
Debug.Log("Закинули на сервер данные POST");
POST();
}
}
public IEnumerator POST()
{
var Data = new WWWForm();
Data.AddField("variable1", "Текст 1");
var Query = new WWW("http://127.0.0.1:8080/server.js", Data);
//Можно посылать и без данных, например так
//WWW Query = new WWW("http://127.0.0.1:8080/server.js");
//И всё равно не работает.
yield return Query;
if (Query.error != null)
{
Debug.Log("Server does not respond : " + Query.error);
}
else
{
Debug.Log("Server responded : " + Query.text);
}
Query.Dispose();
}
То в ответ не приходит ничего. Более того, консоль на стороне сервера, столь бурно реагировавшая на заход с браузера, тоже ничего не пишет. Судя по всему, запрос просто не доходит до неё.
Что я делаю не так?
Неправильно оформлен код на стороне Unity:
WWWForm form = new WWWForm();
form.AddField("variable1","Текст 1");
UnityWebRequest www = UnityWebRequest.Post("http://...", form);
yield return www.Send();
@Eugene Bartosh посоветовал интересный способ, но ничего не заработало. В итоге выяснилось что проблема была в том куске кода, где я пытался вызвать
IEnumerator POST()
простым вызовом
private void Update()
{
if (Input.GetKeyDown(KeyCode.P))
{
Debug.Log("Закинули на сервер данные POST");
POST();
}
}
Разумеется, надо через
StartCoroutine(POST());
С таким кодом уже всё заработало, и в первом варианте и в варианте от Евгения.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Работал с потоками и появился вопрос, когда увидел вот этот код:
Всем доброго времени суток ! Есть проблема описание я не смогу составить поетому сразу смотрите видео : https://drivegoogle
Как разбивать текст ещё и по 2 слова в массив исключая разнообразные символы, а не только по 1 ?